2012-07-09 4 views
2

YUI 기반 클라이언트의 페이지가 매겨진 데이터 검색을 위해 REST와 유사한 API를 설계하고 있습니다. REST URL은 GET 요청에 대해 다음과 같습니다페이징 된 결과의 REST 상태 코드 204

/app/catalog/data?startIndex=<int>&results=<int>&sort=<sting>&dir=<string> 

모든 매개 변수, 매개 변수가 지정되지 않은 경우 즉, DB의 모든 데이터가 덤프됩니다 선택 사항입니다. 이제 데이터베이스에는 1000 개의 레코드 만 있습니다. 다음 reqeust가 구성됩니다

/app/catalog/data?startIndex=1100&results=25 

나는 데이터베이스에서 페이지가 매겨진 결과는 요청이 괜찮다고하지만 비어있는 경우 어떤 상태 코드를 반환해야합니다! 이것이 204 또는 404인지 여부를 결정할 수 없습니다.

생성 된 미디어 유형은 JSON 및 CSV입니다.

답변

7

나는 204가 가장 적절하다고 말할 것입니다. 요청이 성공했지만 결과가 없습니다.

10.2.5 204 No Content 

The server has fulfilled the request but does not need to return an entity-body, and might want to return updated metainformation. 

정확하게 소리가납니다.

+0

이 경우 '404'와의 차이점은 무엇입니까? 잘못된 정렬 열은 '잘못된 요청'입니다. –

+0

@ Michael-O 잘못된 정렬 열은 잘못된 옵션이므로 잘못된 요청입니다. 그러나이 경우 완벽하게 유효한 요청이므로 반환 값이없는 것입니다. 또한 향후에는 유효하지 않은 잘못된 정렬 열을 사용하여 요청이 값을 반환 할 수 있습니다. –

+0

그래서 나는이 경우에 가장 좋은 해결책 인 204를 고수 할 것입니다. 감사. –

1

일반적으로 어떤 형식으로 결과를 반환합니까? 나는이 204 또는 심지어 200 빈 목록을 반환하게하는 경향이있을거야.

+0

결과가있는 JSON 페이로드와 YUI의 메타 데이터. 요청 된 경우 'text/csv'를 반환 할 수도 있습니다. –

+0

메타 데이터가 사람에게 무슨 일이 일어 났는지 (요청 된 페이지/조각이 비어 있음) 나타낼 수 있다면, 나는 빈 데이터 페이로드로 200을 확실히 반환 할 것입니다. –

+0

아니요. 이는 M2M에만 적용됩니다. 인간은 YUI 기반 인터페이스를 사용해야합니다. –

7

나는 이것이 204 또는 404인지 여부를 결정할 수 없습니다.

도 아니다. 200을 빈 결과 (공백 XML 문서 또는 JSON 배열)로 반환하십시오. 일반적으로 페이지 매김보기와 함께 REST 서비스를 사용하므로 결과 페이지와 함께 총 레코드 수를 반환합니다. 이것은 고객이 실수를 깨닫는 데 도움이됩니다. 그러나 기술적으로 그것은 잘못된 것은 아닙니다.

DELETE 작업에는 204을 사용하고 (반환 할 콘텐츠가 없습니다.) PUT입니다.

BTW (굵게 내) : 매개 변수가 지정되지 않은 경우

, DB의 모든 데이터가 믿어

을 덤프됩니다, 당신은이 작업을 수행하지 않으려는 ...

+0

RFC 204에 따르면 GET에서 문제가 없습니다. 204와 같은 완벽한 상태 코드 만있는 경우 왜 200을 반환해야합니까? 데이터 양이 많지 않습니다. 출력 형식 외에도 CSV가 될 수 있습니다. –

+2

httpbis에서 HTTP의 모호성을 해결하기 위해 IETF 워킹 그룹의 작업이 진행 중입니다. "204 응답은 서버가 작업이 대상 자원에 성공적으로 적용되었음을 나타내며 사용자가 에이전트는 현재의 "문서보기"(있는 경우)에서 멀리 이동해서는 안됩니다. " 뷰를 빈 세트로 변경하기위한 것이 아닙니다. 보기를 전혀 변경하지 않고 작업을 완료하기위한 것입니다. http://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-19#section-7.2.5 – fumanchu

+0

똑같은 말을하려고했는데, "어느 쪽도 아니고 그냥 빈 결과를 가지고 200을 반환하십시오" . 그것이 옳은 일입니다. RFC 7231 사양에 '204'가 적용되지 않는 이유는 https://stackoverflow.com/a/38659868/325521을 참조하십시오. '404'는 자원을 찾을 수 없음 (즉, 누락 된 자원, 존재하지 않지만 빈 자원,이 경우) – Shiva