HTTP响应始终返回响应代码200甚至请求失败,而返回状态代码是REST的一部分



我最近加入了一个新项目。在此项目中,所有服务中的所有API始终返回状态代码200。即使该响应应为400或404,API返回状态代码200。

我问了为什么API不返回其他响应代码的原因,程序员告诉我他们不使用响应代码。他们将信息放在体内。

例如,有一些必需的字段,它们返回响应状态代码200,但身体像这样

返回
{"result" : "fail"}

如果未经授权的用户试图访问,则状态代码为200,身体返回如下

{"result" : "unautherized"}

我以前所做的事情非常不同,我总是通过案例指定状态代码,并尝试返回合适的状态代码和消息。我认为这是HTTP协议的一部分。但是,他们告诉我指定状态代码,例如400、404、300,是RESTFUL API的一部分,并且始终返回200是正确的状态代码,因为服务器响应并且还活着。API,始终必须返回200,除了500。因为当服务器死亡时,它无法返回任何东西。

所以这些是问题。

  1. 服务器应始终返回状态代码200,但服务器死亡?
  2. 指定各种状态代码是REST API的一部分?
  3. 不使用状态代码是常见的吗?

服务器应始终返回状态代码200,但服务器死亡?

几年前,我在软件工程上询问了同样的问题:Web应用程序是否使用HTTP作为传输层,还是将其视为HTTP服务器的组成部分?另请参见我应该使用HTTP状态代码来描述应用程序级别事件。

指定各种状态代码是REST API的一部分?

不,休息是运输不可能的。它可以在HTTP顶部使用可以使用,但不需要。因此,它没有说明状态代码。

不使用状态代码是常见的吗?

取决于您问谁。

这是一个偏爱问题。我非常不喜欢"方案x最合适的状态代码是什么?" 问题。另外,还有:

  • HTTP状态代码
  • HTTP响应状态代码 - REST API教程

和其他许多人。我记得有一个网站提供流程图,以确定(最(适当的状态代码。

一般而言,不要打扰。一致性和详尽的文档比分配适当的数字更重要。

我加入了一个使用完全相同策略的项目 - 将状态消息嵌入响应主体内,并将状态代码始终为 200。出于一致原因,最好在软件维护时间遵循存在的策略。但是,不建议任何新项目都使用:

列出的原因:
  1. "指定如400、404、300" 之类的状态代码遵循静止的设计,但这不是休息的一部分。实际上,使用302(重定向(,401(基本和摘要身份验证(,404(Web Server中的默认未找到页面(,500(默认服务器错误页面(几十年前很流行,早于这些天的Restful API(我知道宁静是几十年前提出的,但仅在近年来才流行(。

  2. "返回始终200是正确的状态代码,因为服务器响应并且已经活着" 。这是不正确的。如果是这样,则只能将200用于状态代码 - 只要服务器为"活着",它就可以返回消息。500也不是可以接受的,因为在这种情况下,服务器仍然"活着",它不会死亡...然后,由于状态代码应该始终是200,为什么我们需要代码?

  3. "不使用状态代码是常见的吗?" 。实际上,这是相反的。由于RESTFUL API设计方案越来越流行,因此越来越多的项目使用HTTP状态代码来传递消息语义。但是无论如何,这是一个基于意见的观点。

团队所做的事情可能完全适合于他们所处的情况。但是将这些模式标记为不准确。

我这么说,因为听起来团队没有考虑到他们当前的消息传递方案如何与 generic 参与者一起使用。

例如,缓存是其余体系结构风格的重要问题。在HTTP中,RFC 7234描述了缓存语义。特别是,有一个有关如何通过状态代码触发缓存无效的部分。这反过来说,如果您不区分成功和失败的情况下的状态代码,那么通用组件将是无效的缓存条目,不应无效。

最新更新