我的RESTFul API只能响应JSON编码的数据(即我的所有标题都有Content-Type: application/json
)。如果请求具有不允许JSON的Accept
标头(例如,Accept: text/html
),我应该返回什么?我是否应该在正文中返回400 Bad Request
并附上解释,或者是否有针对此例外的更具体的状态代码?
请注意,这与unsupported request content-types不同。
答案 0 :(得分:10)
如果你想要在语义上正确:
如果请求是HTTP / 1.0:
a 406 Not Acceptable是正确的返回,因为客户端可能无法处理不属于所请求类型的响应。
在HTTP / 1.1中,这仍然是“正确”的事情,但也有例外,来自RFC 2616 Sec 10.4.7
Note: HTTP/1.1 servers are allowed to return responses which are
not acceptable according to the accept headers sent in the
request. In some cases, this may even be preferable to sending a
406 response. User agents are encouraged to inspect the headers of
an incoming response to determine if it is acceptable.
事实上,正如@Jack所提到的那样,问题的可能性非常低。为了完整起见,我只是将这个答案包括在内。
答案 1 :(得分:4)
不要打扰。
有些情况下,您服务的消费者不会费心设置此标头,例如在PHP中使用cURL
或file_get_contents()
时。
如果您的API文档声明您的服务仅支持JSON输出,那应该足够了。
您还可以使用扩展程序来强制执行格式,例如1}}或/path/to/resource.json?a=b
分别用于JSON和XML。
如果您想支持多种输出格式且/path/to/resource.xml?a=b
请求标头值不具有决定性,则应定义默认输出格式。