我的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
?
我的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
?
Answers:
JSON的MIME类型是
application/json
http://www.ietf.org/rfc/rfc4627.txt
http://www.iana.org/assignments/media-types/application/
更具体地在这里:
我更愿意使用HTTP错误状态和特定于应用程序的有效负载进行回复。
不,您不应在错误情况下返回200。
可以重复状态代码,也可以在响应有效负载中包含更详细的错误代码。
根据RFC 4627的规定,正确Content-type
返回的值还注册了MIME类型IANA(实际上,它显示在IANA的页面上)。当然,如果您要编写客户程序,那么您希望在接受的内容上更加自由,并且还要接受诸如和的其他内容。application/json
text/json
text/x-json
现在,如果有错误,你应该不返回HTTP 200,这是从根本上非RESTful。我知道有时您的错误并不完全匹配,但是在RFC 2616第10.4 -10.5节中选择最接近的4XX(客户端的错误)或5XX(服务器的错误)错误,并且在JSON中更精确。
如果使用“ REST API”表示要遵循REST体系结构,则要使用的媒体类型取决于要通过REST API公开的功能。您是否希望能够创建新对象?查询对象列表?编辑对象?如果是这样,则可以使用的一个很好的RESTful媒体类型是vnd.collection + json,因为它定义了一个超文本链接接口来处理json对象的集合。
注意:RESTful API可以使用媒体类型application / json,但是该媒体类型没有超文本链接的RESTful接口,因此它将是状态更改的终点。
遵循Web API架构也是完全可以接受的,其中HTTP RPC调用返回应用程序/ json对象,而其他HTTP RPC调用操纵这些对象,并且没有用于使用和浏览状态更改的超文本链接接口。但这不是REST。
我喜欢REST的这种描述(来自REST的创建者):
换句话说,如果应用程序状态的引擎(以及API)不是由超文本驱动的,则它不能是RESTful的,也不能是REST API。期。
另外,从该文章的讨论中可以看到一个RESTful应用程序的示例:Lost Boys的Spam-E REST应用程序