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

在...创建的问题 Sat, May 11, 2013 12:00 AM

我的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

    
66
  1. 所有答案似乎都假定涉及浏览器。我的REST应用程序使用json消息发送和响应。所有序列化和反序列化都由客户端和服务器内部完成。第三方浏览器与它们中的任何一个都无关,它是非常特定的非公共机器的特定机器。在这种情况下,“application /whatever_type”产生零差异,它只是文本。 “application /json”确实强化了数据是json,但仅作为评论,这已经是使用API​​的任何人都知道的第一件事。
    2017-02-08 15:32:03Z
  2. @ mickeyf - 浏览器支持HTTP协议这一事实并不意味着M2M应用程序不应该这样做。如果要编写不支持Accept和Content-Type标头的应用程序( tools.ietf.org/html/rfc7231#section-3.1.1.5 )您可以自由地这样做,但是其他M2M开发人员可能希望在标准中支持多种媒体类型(例如,application /cbor)方式。
    2018-06-25 21:08:32Z
  3. 醇>
    6答案                              6 跨度>                         

    JSON 规范建议application/json,这似乎得到了 IETF IANA 注册表。

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

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

        
    77
    2014-06-27 20:57:10Z
    1. 感谢JSON规范的链接。我发现了另一个指向另一个MIME类型“text /x-json”的stackoverflow问题。不确定有什么区别。 http://www.ietf.org/rfc/rfc4627.txt

      http://www.iana.org/assignments/media-types/application/

      更具体地说:

      http://www.ietf.org/rfc/rfc4627.txt

          
      19
      2011-05-25 08:39:06Z

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

        
    10
    2009-05-31 18:13:35Z
    1. 似乎David已经离开了SO,但是其他任何人都可以支持上述声明并提出一些论点,为什么这是一个好的(或坏的)练习?根据上面的Software Monkey的回答,我看到,使用有效的JSON响应返回HTTP错误是错误的想法。如果存在真正的错误,服务器应仅发回HTTP错误。
      2013-12-18 10:00:01Z
    2. 醇>

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

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

        
    10
    2011-05-25 09:25:03Z

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

    现在,如果出现错误,您应该返回HTTP 200,这基本上是非RESTful的。我知道有时候你的错误没有完全匹配,但是在 RFC 2616第10.4节 ,并且在JSON中更精确。

        
    6
    2011-08-01 19:15:24Z

    如果通过“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必须是超文本驱动的

      

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

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

        
    1
    2018-03-06 04:35:35Z
来源放置 这里