사람이 자신의 정신 동물을 선택했는지 식별하는 API를 상상해보십시오. 그들은 영의 동물을 하나만 가질 수 있습니다.
현재 :
/person/{id}/selectedSpiritAnimal
그들이 동물을 선택하면 http 200을 반환하고 {selectedAnimal:mole}
그러나 선택이 없으면 http 404를 반환합니다.
이것은 우리가 유효한 도메인 관심사 (아직 정령 동물을 선택하지 않은)를 HTTP 오류로 나타내면서 나의 정령 동물을 불행하게 만듭니다.
또한 비즈니스 인 Sprit-Animal-Hampers-R-us로서 우리는 누군가가 선택을 할 수 없는지 알고 싶어하므로 프롬프트를 표시 할 수 있습니다.
더 나은 답변은 다음과 같습니다.
HTTP 200과 {selectedAnimal:null}
또는 더 명백한
HTTP 200과 {selectedAnimal:null, spiritAnimalSelected: false}
아니면 404를 반환하는 것이 낫습니까? this image has not yet been uploaded
온라인에서 이미지를 볼 때 와 마찬가지로 404 this person has not selected a spirit animal
일 것이므로 404 일 수 있습니다.
이 질문 은 중복으로 제안되었지만 해당 질문은 URL이 나타내는 변경을 허용하지 않도록 응용 프로그램을 구성했을 때 요청되는 유효한 URL을 처리합니다.
여기에서는 리소스가없는 의미가있는 리소스를 나타내는 방법을 살펴 봅니다. 즉, 클라이언트가 URL을 요청하는 것이 유효하며 응답은 사물이 없음을 나타내는 리소스를 성공적으로 요청한 것입니다.
따라서 이것은 '비즈니스 로직'이 아니라 사물의 부재가 의미가있는 상황입니다 (404는 여전히 옳다고 주장하는 많은 동료가있을 수 있습니다). 투기.
답을 고르기가 매우 어렵습니다. 나는 대화와 직장에서 진행되는 대화에 대해 여러 번 생각을 바 꾸었습니다.
나를 위해 여기에 정착하는 것은 4xx는 클라이언트가 오류가 발생했을 때 입니다. 이 경우 클라이언트는 selectedSpiritAnimal url의 응답을 예상해야하므로 오류가 발생하지 않았습니다.
내 동료들 사이의 합의는 이것이 잘못된 API 디자인의 증상이라는 것입니다.
우리는 단순히 / person / {id}를 요청하고 그 사람에 대한 일련의 링크 관계를 반환하는 것이 더 나을 것입니다 ... 그런 다음 / selectedSpiritAnimal 링크가 주어지지 않으면 (사람이 선택하지 않은 경우) 어쨌든 그것을 호출하면 404가 의미가 있습니다. 또는 부분 응답을 구현하고 클라이언트가 데이터의 서브 세트를 요청하지 않는 한 / person / {id}가 더 완전한 문서를 리턴하도록합니다.