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

时间:2009-01-01 03:17:22

标签: json api http rest mime-types

我的REST API返回JSON。

我目前正在将text / plain作为MIME类型返回,但感觉很有趣。 我应该返回application/x-javascript还是其他类型?

第二个问题是关于错误条件的HTTP状态代码。 如果我的REST API返回错误状态,我将返回JSON

{ result: "fail", errorcode: 1024, errormesg: "That sucked. Try again!" }

HTTP状态代码是否应保留在200 OK

6 个答案:

答案 0 :(得分:77)

JSON规范建议使用application/jsonIETFIANA注册表似乎支持这种规范。

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

更新2014-06-27 :客户端(浏览器)仅使用200响应的日子早已过去,RESTful API的主流建议是使用适合响应的HTTP响应代码,2xx用于成功响应(例如201为PUT创建; 204无内容用于DELETE)以及4xx和5xx用于所有错误条件,包括来自API本身的错误条件。

答案 1 :(得分:19)

答案 2 :(得分:10)

我更喜欢回复HTTP错误状态和特定于应用程序的有效负载。

答案 3 :(得分:10)

不,你不应该在错误的情况下返回200.

可以重复状态代码,或在响应有效负载中包含更详细的错误代码。

答案 4 :(得分:6)

根据RFC 4627Content-type返回的正确application/json也会注册MIME类型IANA(实际上,它会显示在IANA的页面上)。当然,如果您要撰写客户,您可能希望在接受的内容中更加自由,并接受text/jsontext/x-json等其他人。

现在,如果出现错误,您应该返回HTTP 200,这基本上是非RESTful的。我知道有时候你的错误并不完全匹配,但是在RFC 2616 Sections 10.4 - 10.5中选择最接近的4XX(客户端错误)或5XX(服务器错误)错误,并且在JSON中更精确。

答案 5 :(得分:1)

如果通过" REST API"您的意思是您想要遵循REST架构,那么要使用的媒体类型取决于您希望通过REST API公开的功能。您想要能够创建新对象吗?查询对象列表?编辑一个对象?如果是这样,那么一个好的RESTful媒体类型可能是vnd.collection + json,因为它定义了一个超文本链接接口来操作json对象的集合。

注意:RESTful API可以使用媒体类型application / json,但是这种媒体类型没有超文本链接的RESTful接口,因此它将成为状态更改的终点。

遵循Web API架构也是完全可以接受的,其中HTTP RPC调用返回application / json对象,而其他HTTP RPC调用操纵这些对象,并且没有用于使用和导航状态的超文本链接接口变化。但这不是REST。

我喜欢REST的描述(来自REST的创建者):

REST APIS must be hypertext driven

  

换句话说,如果应用程序状态的引擎(以及API)   不是由超文本驱动,那么它不能是RESTful而不是   是一个REST API。周期。

另外,从该帖子的讨论中可以看出这是一个RESTful应用程序示例:Lost Boys's Spam-E REST Application