为什么JSON应该有status属性

chi*_*oro 5 rest json

我偶然发现了一种我发现非常普遍的做法.我甚至找到了一个给这个名字命名的网页,但我忘了这个名字,而且我再也找不到谷歌那个页面了.

实践是来自REST服务的每个JSON响应都应具有以下结构:

{
    "status": "ok",
    "data": { ... }
}
Run Code Online (Sandbox Code Playgroud)

或者在错误的情况下:

{
    "status": "error",
    "message": "Something went wrong"
}
Run Code Online (Sandbox Code Playgroud)

我的问题:为什么在JSON中需要这样的"状态"属性是什么意思?在我看来,这是为HTTP状态代码制作的.

REST使用客户端和服务器之间的HTTP通信方式,例如,应使用"DELETE"动词进行删除.同样,如果找不到资源,则应使用404等.因此,如果符合这种思路,任何错误情况都应在HTTP状态中正确编码.

是否有特定原因在错误情况下返回HTTP 200状态代码并在JSON中出现错误?它似乎只是在处理响应时使javascript条件分支更复杂.

我发现了一些状态可以"重定向"以告诉应用程序重定向到某个URL的情况.但是如果使用了正确的HTTP状态代码,浏览器将"免费"执行重定向,从而正确维护浏览历史记录.

我想主要提出两个可能的答案:

  • 要么是有两个争吵社区,每个社区都有自己喜欢的方法(使用HTTP状态总是与使用HTTP状态永远不会)
  • 或者我错过了一个重点,你会告诉我虽然在某些情况下应该使用HTTP状态,但是在某些特定情况下,HTTP状态不适合并且"status"JSON属性发挥作用.

hvg*_*des 5

你是对的。我认为您所看到的是人们没有正确执行 REST 的副作用。或者根本不做 REST。使用 REST 并不是设计良好的应用程序的先决条件;没有规定 Web 应用程序必须是 REST 式的。

另一方面,对于错误情况,有时应用程序希望返回 200 代码,但返回一个错误来表示业务逻辑故障。HTTP 错误代码并不总是与应用程序业务错误的语义相匹配。


Jan*_*ger 4

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

  • HTTP 用于建立(高级)连接和传输数据。因此, HTTP状态代码会告知您连接是否已建立、如何建立或为何未建立。成功连接后,HTTP 请求的正文可以包含任何内容(例如 XML、JSON 等),因此这些状态代码必须定义一般含义。它不会通知您响应的正确性或类型(例如错误消息或数据)。

  • 当使用 JSON 交换数据时,您当然可以省略该status属性,但是如果您只需读取一个属性就知道它是否包含您所请求的对象或错误消息,那么解析 JSON 会更容易。

所以,是的,返回状态代码并在 JSON 中200包含属性是完全正常的。"status": "error"

  • Justin - 在 REST 中,HTTP 旨在用于报告应用程序级别的错误。 (2认同)