저는 Sinatra와 함께 Ruby에서 RESTful 웹 응용 프로그램을 개발 중입니다. 그것은 CRUD 작업을 지원해야하고, 나는 데이터의 형식을 다음과 같은 기능이 요청이 지정된 내용에 따라 한 요청 읽기 응답 :406 이상 406 (http 상태 코드)
def handleResponse(data, haml_path, haml_locals)
case true
when request.accept.include?("application/json") #JSON requested
return data.to_json
when request.accept.include?("text/html") #HTML requested
return haml(haml_path.to_sym, :locals => haml_locals, :layout => !request.xhr?)
else # Unknown/unsupported type requested
return 406 # Not acceptable
end
end
을 만 나는 else
성명에서 수행하는 것이 가장 좋습니다 모르는를 . 가장 큰 문제는 브라우저와 jQuery AJAX가 */*
을 수용하므로 기술적으로 406
오류가 가장 좋은 아이디어는 아님을 의미합니다. 그러나 : 나는 무엇을 보낼 까? 나는 의미가없는 data.to_s
을 할 수 있었다. HAML이 반환하는 것을 보낼 수는 있지만, 그들은 text/html
을 요구하지 않았습니다. 나는 그걸 어떻게 든 알리고 싶습니다.
두 번째로 406
코드를 사용하는 것이 올바른 방법이라고 가정하면 W3 spec에 따라 응답을 유효한 형식으로 지정하려면 어떻게해야합니까?
HEAD 요청이 아닌 한, 응답에는 사용자 또는 사용자 에이전트가 가장 적합한 것을 선택할 수있는 사용 가능한 엔터티 특성 및 위치의 목록을 포함하는 엔터티가 포함되어야합니다 (SHOULD). 엔티티 형식은 Content-Type 헤더 필드에 지정된 미디어 유형으로 지정됩니다. 사용자 에이전트의 형식과 능력에 따라, 가장 적절한 선택의 선택은 자동적으로 수행 될 수있다. 그러나이 규격은 그러한 자동 선택을위한 표준을 정의하지 않는다.
좋은 답변입니다. 서버에서 406 에러를 완벽하게 구현할 수 있으므로 데이터가 아닌'text/plain'에 오류 메시지를 보낼 수 있습니다. 이것은 최상의 해결책 일 수 있습니다. 허용되는 유형의 목록을 포함하도록 응답을 어떻게 작성해야하는지 알려주실 수 있습니까? – MarioDS
이전 버전에 대한 답을 롤백하는 것이 좋습니다. '406'이 틀린 경우 '405'는 HTTP 메소드와 관련되어서 더 나쁩니다. 'GET','POST' 등 ... – MarioDS
롤백. 사용할 수있는 유형의 목록은 헤더가 될 것이며 Sinatra 문서는 추가 헤더 컨텐트를 만드는 방법을 보여줍니다. –