을 호출 GET
하여 사용자 목록을 가져 오려고 api/users
하지만 현재 테이블이 잘려서 사용자가 없다고 가정 해 보겠습니다 . 어떤이 시나리오에 대한 적절한 응답은 다음과 같습니다 404
나 204
?
답변
나도 말하고 싶다.
404 (찾을 수 없음)가 아닌 이유는 무엇입니까?
404 상태 코드는 리소스를 찾을 수없는 상황을 위해 예약해야합니다. 이 경우 리소스는 사용자 모음입니다 . 이 컬렉션은 존재하지만 현재 비어 있습니다. 개인적으로 누군가가 몇 명의 사용자를 제거했기 때문에 200
하루와 404
다음 날 이 있으면 응용 프로그램의 클라이언트 작성자로서 매우 혼란 스러울 것 입니다. 나는 무엇을해야합니까? 내 URL이 잘못 되었나요? 누군가 API를 변경하고 리디렉션을 무시 했습니까?
204 (콘텐츠 없음)가 아닌 이유는 무엇입니까?
다음 은 w3c의 204 상태 코드 설명 에서 발췌 한 것입니다 .
서버가 요청을 수행했지만 엔티티 본문을 반환 할 필요가 없으며 업데이트 된 메타 정보를 반환 할 수 있습니다.
이 경우 합리적으로 보일 수 있지만 클라이언트를 혼란스럽게 할 수도 있습니다. A 204
는 일부 작업이 성공적으로 실행되었으며 데이터를 반환 할 필요가 없음을 나타냅니다. 이는 DELETE
요청에 대한 응답으로 완벽 하거나 데이터를 반환 할 필요가없는 일부 스크립트를 실행할 수 있습니다. 의 경우 api/users
일반적으로 사용자 컬렉션의 대표를받을 것으로 예상합니다. 응답 본문을 한 번 보내고 다른 번에는 보내지 않는 것은 일관성이없고 잠재적으로 오해의 소지가 있습니다.
200을 사용하는 이유 (OK)
위에서 언급 한 이유 (일관성)로 인해 빈 컬렉션의 표현을 반환합니다. XML을 사용하고 있다고 가정 해 보겠습니다. 비어 있지 않은 사용자 컬렉션에 대한 일반적인 응답 본문은 다음과 같습니다.
<users>
<user>
<id>1</id>
<name>Tom</name>
</user>
<user>
<id>2</id>
<name>IMB</name>
</user>
</users>
목록이 비어 있으면 다음과 같이 응답 할 수 있습니다 (아직 사용하는 동안 200
).
<users/>
어느 쪽이든 클라이언트는 잘 알려진 특정 형식을 따르는 응답 본문을받습니다. 불필요한 혼동 및 상태 코드 검사가 없습니다. 또한 상태 코드 정의를 위반하지 않습니다. 모두가 행복합니다.
JSON이나 HTML 또는 사용중인 모든 형식으로 동일한 작업을 수행 할 수 있습니다.
답변
런타임 상황에 따라 두 가지 코드 중 하나에 대답합니다.
404 찾을 수 없음)
이 대답은 테이블이 없으면 매우 정확합니다. 빈 테이블이 아니라 사용자 테이블이 없습니다. 정확한 아이디어를 확인합니다. 리소스가 없습니다. 추가 옵션은 테이블이없는 이유에 대한 자세한 정보를 제공하는 것입니다. 몇 가지 자세한 코드가 있지만 404는 실제로 테이블이없는 상황을 참조하는 데 매우 좋습니다.
200 (OK)
테이블이 있지만 비어 있거나 요청 프로세서가 모든 결과를 필터링 한 모든 경우. 이는 ‘귀하의 요청이 정확하고 모든 것이 정상이지만 데이터가 없거나 귀하의 요청과 일치하는 데이터가 없기 때문에 귀하는 어떤 데이터와도 일치하지 않습니다. 이것은 보안 거부 답변과 달라야합니다. 또한 일부 데이터가 있고 일반적으로 테이블에 액세스 할 수 있지만 요청과 일치하는 모든 데이터에 액세스 할 수없는 상황에서 200을 반환하도록 투표합니다 (데이터는 개체 수준 보안으로 인해 필터링되었지만 일반적으로 의뢰).
답변
사용자 개체 목록을 예상하는 경우 가장 좋은 해결책은 404 또는 204 응답을 사용하는 것보다 200 OK로 빈 목록 ([])을 반환하는 것입니다.
답변
확실히 200을 반환합니다.
404는 리소스를 찾을 수 없음을 의미합니다. 그러나 자원은 존재합니다. 또한 응답이 404 상태 인 경우. 사용자 목록이 비어 있거나 채워져 있는지 어떻게 알 수 있습니까?
- ‘/ users’가 비어 있으면 ‘200’을 반환해야합니다.
- ID가 없으면 ‘/ users / 1’입니다. 404를 반환해야합니다.
답변
목록이 비어 있으면 200 OK 여야 합니다.
이유 : 빈 테이블은 테이블이 있지만 레코드가 없음을 의미합니다.
404 찾을 수 없음 은 요청 된 끝 점이 존재하지 않음을 의미합니다.