2010-12-12 3 views
1

처음에는 JSON 형식으로 수락하고 응답하는 RESTful API 서비스를 개발 중입니다. 표준을 따랐으며 요청자의 경우 헤더가 JSON과 다른 경우 406 HTTP 상태 코드로 응답하여 요청자에게 다른 형식으로 데이터를 출력 할 수 없음을 알리고 싶습니다.406 상태 코드를 올바르게 보내는 방법은 무엇입니까?

W3에 따르면 내 응답 "가능한 개체의 특성과 사용자 또는 사용자 에이전트가 하나의 가장 적합한을 선택할 수있는 위치 (들)의 목록을 포함한 엔터티를 포함해야".

위의 설명에서 내게 그다지 알려주지 않으므로 어떻게해야합니까? 언급 된 엔티티는 무엇입니까??

아이디어가 있습니까? 편집


처음에 나는 어쩌면 콘텐츠 형식 헤더의 쉼표로 구분 된 목록이 될 수도 있지만 어쩌면 다시 생각 후에 나는 같은 일의 브라우저합니까 및 Accept 헤더를 사용해야한다는 생각 ? 실제로 더 많은 의미가 있지만이 정보를 찾을 수는 없습니다. 여기

답변

3

세 가지 문제 :

첫째, RFC 2616에서 메모는 "/path/to/thing.xml"대와 같은 다른 유형의 응답이 다양한 URI의에서 사용할 수 있습니다 URI 구성표를 해결하기위한 것입니다 "/path/to/thing.json". 그것은 항상 인기있는 선택은 아니지만 그렇게 할 수 있다면 "엔터티"의 각 항목에 하이퍼 링크를 포함 시키십시오. 즉, 응답의 본문에 있습니다. RFC에서는 이러한 링크에 대해 Content-Type 또는 처리 모델을 요구하지 않으므로이를 반환하는 방법은 직접 결정해야하지만 <a> 태그가있는 HTML은 일반적이며 유용합니다.

여러 유형을 별도의 URI에 표시하지 않고 원래 URI에서 한 유형 만 표시하려면 406 및 해당 자원이 내보낼 수있는 유형을 나타내는 엔티티로 응답하는 것이 좋습니다. .

두 번째로, 대부분의 웹 브라우저는 Accept 머리글 (낮은 품질의 값)에 */*을 보내는데 이는 Content-Type과 일치해야합니다. 또한 사양에는 "... Accept 헤더 필드가 없으면 클라이언트가 모든 미디어 유형을 수용한다고 가정합니다." 그러므로 406 세가되어야하는 경우는 거의 없습니다.

세 번째로 응답 엔터티의 Content-Type 이외의 Content-Type 응답 헤더를 내 보내지 마십시오. 허용되는 유형을 나열하는 데 이 아닌이 사용되어야합니다. 이 아니어야합니다.은 'Accept'라는 응답 헤더를 내 보냅니다. 'Accept'헤더는 요청에만 사용됩니다. http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.1

+1

+1 개인적으로 저는 406의 반환 콘텐츠 유형으로 text/plain을 사용하고 '이 서비스는 application/json 만 제공합니다'와 같은 텍스트를 포함합니다 –

+0

@fumachu 유형을 원하지 않습니다. URI 내에서 "Accept"와 "Content-Type"헤더 ("OTT"일지도 모름)를 통해 "제대로"하고 싶습니다. 나는 브라우저가'*/*'를 보내는 경향이 있다는 것을 알고 있는데이 경우 기본 출력 형식이 사용된다. (이 경우 JSON). –

+0

@fumachu이 "엔터티"가 실제 응답 본문임을 명확히하기 위해 감사드립니다.나는 문서를 읽는 동안 그것을 놓쳤음에 틀림 없다 (또는 충분히 명확하게 진술되지 않았다). –

관련 문제