What MIME type if JSON is being returned by a REST API?
我的RESTAPI返回JSON。
我现在返回文本/纯文本作为mime类型,但感觉很有趣。我是要退货还是其他类型?
第二个问题是关于错误条件的HTTP状态代码。如果我的RESTAPI返回错误状态,我将以JSON的形式返回
1 | { result:"fail", errorcode: 1024, errormesg:"That sucked. Try again!" } |
HTTP状态代码应该保留在
JSON规范建议使用
在第二个问题上,我认为如果消息处理以某种方式失败,您应该作为JSON消息返回结构化和标准的错误响应;只有在由于某种原因无法将消息传递给后端处理程序时,才应考虑HTTP错误代码。
更新2014-06-27:客户端(浏览器)只处理200个响应的日子已经很长了,RESTful API的主流建议是使用适合响应的HTTP响应代码,2xx用于成功响应(例如,为Put创建201个;204个不包含要删除的内容),4xx和5xx用于所有错误条件,包括来自T的错误条件。他自杀了。
json的mime类型是
http://www.ietf.org/rfc/rfc4627.txt
http://www.iana.org/assignments/media-types/application/
更具体地说:
http://www.ietf.org/rfc/rfc4627.txt
不,在错误情况下不应该返回200。
可以重复状态代码,或者在响应负载中包含更详细的错误代码。
我更喜欢使用HTTP错误状态和特定于应用程序的有效负载来回复。
根据RFC4627,正确返回的
现在,如果有错误,您不应该返回HTTP200,这从根本上来说是不可恢复的。我知道有时候错误并不完全匹配,但是在RFC2616第10.4-10.5节中选择最接近的4xx(客户机错误)或5xx(服务器错误)错误,在JSON中更精确。
如果"rest api"是指您希望遵循rest体系结构,那么要使用的媒体类型由您希望通过rest api公开的功能决定。是否希望能够创建新对象?查询对象列表?编辑对象?如果是这样,那么一个好的RESTful媒体类型可能是vnd.collection+json,因为它定义了一个超文本链接接口来操作一组json对象。
注意:restful API可以使用media-type application/json,但该媒体类型没有超文本链接的restful接口,因此它将是状态更改的终点。
遵循Web API体系结构也是完全可以接受的,其中HTTP RPC调用返回application/json对象,其他HTTP RPC调用操作这些对象,并且没有用于使用和导航状态更改的超文本链接接口。但这不是休息。
我喜欢对休息的描述(来自休息的创造者):
REST API必须是超文本驱动的
In other words, if the engine of application state (and hence the API)
is not being driven by hypertext, then it cannot be RESTful and cannot
be a REST API. Period.
号
此外,从对该帖子的讨论中可以看到一个RESTful应用程序的示例:Lost Boys的SPAM-E REST应用程序