• 카테고리

    질문 & 답변
  • 세부 분야

    웹 개발

  • 해결 여부

    미해결

4xx vs 2xx 질문입니다.

21.01.02 17:11 작성 조회수 147

0

https://www.inflearn.com/questions/111465

해당 질문에 대한 답변을 읽다가 추가적으로 궁금한게 생겨서 질문을 남깁니다.

400 응답과 200 응답 중 선택하기 위해서는 비즈니스 로직까지 정상 수행했는지가 중요하다고 하셨는데 정상 수행이 되었다고 판단하는 범위가 어디까지 인지가 조금 헷갈려서 질문드립니다.
예)
1. 이미 배달 중이거나 완료인 주문을 다시 배달 시작 요청 시( post /orders/1/start_delivery)
이건 비즈니스 로직을 정상적으로 수행할 수 없는 거라고 봐야 되는 건가요?(400)
2. 보험금 시나리오(답변에서 언급하신)
보험금 지급 시 승인 거절이라는 개념이 존재하지 않고 승인 또는 실패만 존재한다면 보험금 지급 요건을 충족하지 못한 사람의 요청은 400인가요?
3. 회원가입 시나리오(답변에서 언급하신)
보류 상태 없이 21살 이상 가입 20살 이하 실패라면 20살 이하인 경우 400인 거죠?

좋은 강의 항상 감사합니다. ㅎㅎ

건강하시고 새해 복 많이 받으세요 ㅎㅎ

답변 2

·

답변을 작성해보세요.

1

asdkfur님의 프로필

asdkfur

질문자

2021.01.03

정말 자세한 답변 다시 한번더 감사드립니다. ㅎ

0

안녕하세요. asdkfur님

핵심은 클라이언트와 서버간에 서로 협의를 해서 API 스펙을 어디까지 맞추었냐입니다.

그래서 클라이언트가 스펙을 모두 준수했다면 400으로 반환하면 안된다는 것이 핵심입니다.

HTTP도 매우 광범위한 범위를 표준화 하는 것이기 때문에 비슷한 비즈니스여도 상황에 따라서 서로 다른 설계가 나올 수 있습니다.

말씀하신 예시의 경우에도 각각의 상황과 API 스펙을 어떻게 협의하느냐에 따라 400이 나은 선택일 수 있고 200이 나은 선택일 수 있습니다. 이런 상황에 클라이언트와 서버가 합의할 수 있는 API 스펙을 잘 만들어 내는 것이 바로 묘미지요 ㅎㅎ

1. 이미 배달 중이거나 완료인 주문을 다시 배달 시작 요청 시( post /orders/1/start_delivery)

이건 비즈니스 로직을 정상적으로 수행할 수 없는 거라고 봐야 되는 건가요?(400)

-> API 스펙에서 배달 상태가 완료인 주문은 배달 시작을 요청하면 안됩니다. 라고 하면 400으로 반환하는게 맞습니다.

2. 보험금 시나리오(답변에서 언급하신)

보험금 지급 시 승인 거절이라는 개념이 존재하지 않고 승인 또는 실패만 존재한다면 보험금 지급 요건을 충족하지 못한 사람의 요청은 400인가요?

-> API 스펙에서 클라이언트가 명확하게 이런 조건에서는 서버에 요청을 하면 안된다는 기준이 필요합니다. 그런데 이런 기준 없이 API 스펙에서는 단순히 고객의 정보만 기입하고 넘긴다면, 그래서 서버에서 정상 비즈니스 로직을 태울 수 밖에 없다면 200으로 반환하고 응답 값 내부에 성공인지, 실패인지를 기입하는 것이 더 나은 선택이라 생각합니다.

3. 회원가입 시나리오(답변에서 언급하신)

보류 상태 없이 21살 이상 가입 20살 이하 실패라면 20살 이하인 경우 400인 거죠?

-> API 스펙에서 21살 이상은 요청이 불가능 합니다. 라고 명시하면, 클라이언트가 잘못 요청한 것이기 때문에 400을 반환하는 것이 맞습니다.

도움이 되셨길 바래요^^