如果REST API返回JSON,那么MIME类型是什么?

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状态代码应该保留在200 OK上吗?


JSON规范建议使用application/json,这似乎得到了IETF和IANA注册中心的支持。

在第二个问题上,我认为如果消息处理以某种方式失败,您应该作为JSON消息返回结构化和标准的错误响应;只有在由于某种原因无法将消息传递给后端处理程序时,才应考虑HTTP错误代码。

更新2014-06-27:客户端(浏览器)只处理200个响应的日子已经很长了,RESTful API的主流建议是使用适合响应的HTTP响应代码,2xx用于成功响应(例如,为Put创建201个;204个不包含要删除的内容),4xx和5xx用于所有错误条件,包括来自T的错误条件。他自杀了。


json的mime类型是

application/json

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,正确返回的Content-typeapplication/json,它也注册了mime类型IANA(实际上,它出现在IANA的页面上)。当然,如果你要写一个客户,你会希望在你接受的内容上更加自由,也会接受其他人,如text/jsontext/x-json

现在,如果有错误,您不应该返回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应用程序