JSON为什么应该有一个状态属性(Why should JSON have a status pro

2019-09-19 08:01发布

我偶然发现了这种做法我认为是相当普遍的。 我甚至发现了一个网页,给了这个名字,但名字我忘记了,我不能够找到对谷歌该网页了。

其做法是,从一个REST服务的每一个JSON响应应具有以下结构:

{
    "status": "ok",
    "data": { ... }
}

或在出现错误的情况下:

{
    "status": "error",
    "message": "Something went wrong"
}

我的问题:什么是为什么要在JSON需要这样的“状态”属性点? 在我看来这就是HTTP状态代码是为制作。

REST使用客户端和服务器,例如“删除”动词应该用于删除之间的通信的HTTP手段。 以同样的方式,404应该如果资源没有找到,等于是用这种思维内联,任何错误的情况下,应在适当的HTTP状态编码使用。

有没有在一个错误的情况下在JSON,而不是返回一个HTTP 200状态码,有故障的具体原因? 这似乎只是处理响应时做出的JavaScript条件分支更加复杂。

我发现了一些情况下,状态可能是“重定向”告诉应用程序重定向到特定URL中。 但是,如果使用正确的HTTP状态代码,浏览器将执行重定向“免费”,正确维护浏览历史记录。

我从图片你主要是两个可能的答案:

  • 要么有自己喜欢的方式每两个争吵社区(使用HTTP状态总是与使用HTTP状态从不)
  • 或者我错过了一个重要的观点,你会告诉我,虽然HTTP状态应该用于某些情况下,存在一个HTTP状态不适合和“状态” JSON产权进场具体案件。

Answer 1:

您在这里混合两个不同的层:

  • HTTP是用于建立(高电平)的连接和传输数据。 该HTTP状态代码从而告知您是否以及如何建立连接或者为什么不是。 在成功连接HTTP请求的身体然后可以包含任何内容(如XML,JSON等),因此这些状态代码必须定义一个普遍意义。 它不会告诉你关于响应的正确性或类型(例如错误信息或数据)。

  • 当使用JSON用于交换数据你一定可以省略status属性,但它是更容易为你解析JSON,如果你知道它是否包括您请求的对象或只是阅读一个属性的错误消息。

所以,是的,这是完全正常的返回200状态码,并有"status": "error"属性在你的JSON。



Answer 2:

你是对的。 我想你看到的是人们无法正确做REST的副作用。 或者只是没有做REST的。 使用REST是不是一个先决条件,一个精心设计的应用程序; 没有规则的webapps必须REST-FUL。

在另一方面,对于出现的错误,有时应用程式要为返回一个200码,但代表一个业务逻辑失败的错误。 HTTP错误代码并不总是与应用程序的业务错误的语义。



Answer 3:

HTTP状态代码可以由很多原因引起,包括负载平衡器,代理服务器,缓存,防火墙等这些都不要去修改你的JSON输出,除非他们完全打破它,这也可以看作是一个错误。

底线:它更可靠通过JSON做到这一点。



文章来源: Why should JSON have a status property
标签: json rest