Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果RESTAPI正在返回JSON,那么MIME类型是什么?_Json_Rest_Http_Mime Types_Restapi - Fatal编程技术网

如果RESTAPI正在返回JSON,那么MIME类型是什么?

如果RESTAPI正在返回JSON,那么MIME类型是什么?,json,rest,http,mime-types,restapi,Json,Rest,Http,Mime Types,Restapi,我的restapi返回JSON 我现在返回text/plain作为MIME类型,但感觉很有趣。 我应该返回应用程序/x-javascript还是其他类型 第二个问题是关于错误条件的HTTP状态代码。 如果RESTAPI返回错误状态,则返回JSON { result: "fail", errorcode: 1024, errormesg: "That sucked. Try again!" } 如果HTTP状态代码保持在200 OK?规范建议application/json,这似乎得到了和注册表

我的restapi返回JSON

我现在返回text/plain作为MIME类型,但感觉很有趣。 我应该返回
应用程序/x-javascript
还是其他类型

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

{ result: "fail", errorcode: 1024, errormesg: "That sucked. Try again!" }
如果HTTP状态代码保持在
200 OK

规范建议
application/json
,这似乎得到了和注册表的支持

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


更新2014-06-27:客户端(浏览器)只处理200个响应的日子已经过去很久了,RESTful API的普遍建议是使用适合于响应的HTTP响应代码,2xx表示成功响应(例如,201为PUT创建;204无内容用于删除),4xx和5xx表示所有错误条件,包括来自API本身的内容。

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

JSON的MIME类型是

application/json

更具体地说:


不,您不应该在错误情况下返回200


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

根据,正确返回的
内容类型是
application/json
,它还注册了MIME类型IANA(事实上,它显示在IANA的页面上)。当然,如果您要编写一个客户机,您会希望在您接受的内容上更加自由,同时也接受其他内容,如
text/json
text/x-json

现在,如果出现错误,您应该而不是返回HTTP 200,这基本上是非RESTful的。我知道有时错误并不完全匹配,但请在-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的创建者):

换句话说,如果引擎处于应用程序状态(因此API) 不是由超文本驱动的,那么它就不能是RESTful的,也不能是 这是一个RESTAPI。句号


另外,从这篇文章的讨论中可以看到一个RESTful应用程序的示例:

感谢JSON规范的链接。我发现另一个stackoverflow问题指向另一个MIME类型“text/x-JSON”。不知道有什么区别。出于实际原因(比如说,你混合使用了Flex可怕的HTTP客户机),有时候你必须使用200来完成所有事情。但是,在正常情况下,您希望针对这种情况使用最合适的HTTP状态代码。@ashitaka:另一个问题专门询问如何将JSON设置为text/x-JSON。它没有声称这是JSON的正确媒体类型。看起来David已经离开了,但是其他人能支持上面的说法并提出一些论点吗?为什么这是一个好(或坏)的做法?根据上面软件Monkey的回答,我明白了,返回带有有效JSON响应的HTTP错误是错误的想法。服务器只应在存在真实错误的情况下发回HTTP错误。对此的所有答案似乎都假定涉及到浏览器。我的REST应用程序发送并响应json消息。所有序列化和反序列化都由客户端和服务器内部完成。第三方浏览器与之无关,它们都是非常特定的机器到非常特定的非公共机器。在这种情况下,“应用程序/无论什么类型”都没有区别,它只是文本。“application/json”确实强调数据是json,但只是作为注释,这已经是任何使用API的人都知道的第一件事了。@mickeyf-浏览器支持HTTP协议的事实并不意味着M2M应用程序不应该这样做。如果您想编写不支持Accept和Content-Type头()的应用程序,您可以自由编写,但是其他M2M开发人员可能希望以标准方式支持多种媒体类型(例如,应用程序/cbor)。