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

ash*_*aka 67 api rest json http mime-types

我的REST API返回JSON.

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

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

{ result: "fail", errorcode: 1024, errormesg: "That sucked. Try again!" }
Run Code Online (Sandbox Code Playgroud)

HTTP状态代码应该保留在200 OK

Law*_*Dol 77

JSON规范建议application/json,这似乎是由支持IETFIANA注册表.

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

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

  • 出于实际原因(例如,你在混合中使用了Flex的可怕HTTP客户端),有时你必须使用200来处理所有事情.但是,在正常情况下,您希望使用最合适的HTTP状态代码. (7认同)
  • @ashitaka:其他问题专门询问如何将JSON设置为text/x-json.它没有声称这是JSON的正确媒体类型. (2认同)

小智 10

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

  • 大卫似乎离开了SO,但是其他任何人都可以支持上述陈述并带来一些争论,为什么这是一个好的(或坏的)练习?根据上面的Software Monkey的回答,我看到,使用有效的JSON响应返回HTTP错误是错误的想法.如果存在真正的错误,服务器应仅发回HTTP错误. (2认同)

Jul*_*hke 10

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

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


Luk*_*Shu 6

根据RFC 4627,Content-type返回的适当方法是注册MIME类型IANA(实际上,它显示在IANA的页面上).当然,如果你要写一个客户,你会希望在你所接受的内容中更加自由,并且也接受其他诸如和.application/jsontext/jsontext/x-json

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