rest - 为什么在 RESTful 服务中使用 HTTP 响应代码来指示业务相关逻辑?
问题描述
我已阅读此内容: 对于一般不成功的请求(不是错误),适当的 HTTP 状态代码响应是什么?
我理解这些原则,但使用 HTTP 响应代码来指示业务逻辑事物的 RESTful API 服务状态似乎模棱两可、重复且让我感到困惑。
仅考虑 HTTP 响应代码,403 可能表示用户没有足够的权限使用 RESTful 服务,或者只是无权访问 HTTP 服务器(例如 HTTP 授权失败)。
所以在这种情况下,客户端应该查看响应正文,看看它是业务逻辑错误还是仅仅是服务器错误。
对于 404,客户端不知道服务器上的资源是否不存在,或者业务对象是否不存在。它还必须查看响应正文。
那么为什么人们会继续使用带有业务逻辑错误的 HTTP 响应代码呢?对我来说,简单地查看响应正文中的业务逻辑错误并进行处理更简单。是否有必要使用带有业务逻辑错误的 HTTP 响应?
非常感谢。
解决方案
那么为什么人们会继续使用带有业务逻辑错误的 HTTP 响应代码呢?
在通过 HTTP 协议创建遵循REST 架构风格的应用程序时,您需要使应用程序域适应资源,这是 REST 架构的核心部分。
服务器提供一组 URL 来定位资源,并且可以通过 HTTP 动词和 JSON 和/或 XML 等表示来操纵它们的状态。HTTP 状态码用于通知客户端有关操作的状态。误导性的状态代码将传达有关请求状态的错误信息。
RFC 7231定义了状态码的类别:
1xx
(信息性):请求已收到,继续处理2xx
(Successful):请求被成功接收、理解并接受3xx
(重定向):需要采取进一步的行动才能完成请求4xx
(客户端错误):请求包含错误的语法或无法完成5xx
(服务器错误):服务器未能满足明显有效的请求
例如,如果请求由于客户端错误而失败(例如,有效负载中提供了格式错误的请求或无效数据),则返回 a2xx
或5xx
状态代码在这里会产生误导。状态码将4xx
适合表达导致错误的原因。
是否有必要使用带有业务逻辑错误的 HTTP 响应?
对我来说,简单地查看响应正文中的业务逻辑错误并进行处理更简单。
确实,HTTP 状态代码有时不足以传达有关错误的足够信息以提供帮助。但是创建RFC 7807是为了填补这一空白:它定义了简单的 JSON 和 XML 文档来指示问题。
推荐阅读
- angular - CI 无法构建 Angular 8 应用程序
- sql - 如何在不使用 varchar 数据的情况下在 Presto SQL 中进行重复数据删除
- wordpress - 为页面分配类别并将其显示在 URL slug 中
- google-apps-script - 在 Google Apps 脚本中,“AdminDirectory.Groups.insert(group)”命令是否被视为发布请求?
- batch-file - 使用 (copy #) 删除本地打印机
- android - 由于 Androidx 和 Android 支持最新版本之间的冲突导致构建错误
- c# - 如何在任务管理器中使用不同的进程名称(对于当前进程)名称?
- .net-core - 在两个实体与另一个上下文中的第三个实体之间创建映射的最佳方法
- android - 是否应将意图中的捆绑包缓存到已保存的实例状态捆绑包?
- c# - OpenXml 正在覆盖现有工作表