【问题标题】:HTTP REST Response if dependent operation fails相关操作失败时的 HTTP REST 响应
【发布时间】:2020-04-14 14:42:14
【问题描述】:

假设调用者向 REST 服务器发送 POST 请求以创建资源。服务器创建资源并返回 201。

现在,如果资源创建成功,服务器代码将被修改以执行其他操作。这些操作可以是任何东西——为簿记创建另一个资源、更新另一个资源等。

如果这些依赖操作中的任何一个或所有失败,服务器应该向调用者返回 201(因为创建了预期的资源)还是导致失败(即使调用者不知道/不关心这些依赖资源)?

【问题讨论】:

    标签: rest http-response-codes


    【解决方案1】:

    HTTP 响应与请求相关,如果成功则返回将始终成功。例如,在数据库中列出一个应该有数据但为空的表,将成功返回,因为默认目标只是列出该表。

    您可以在此处找到所有响应代码的定义:https://developer.mozilla.org/en-US/docs/Web/HTTP/Status

    可以使用编程语言来处理 API 的返回,方法是创建条件以根据您理解的是否为成功请求返回自定义 HTTP 响应。

    【讨论】:

      【解决方案2】:

      大部分 HTTP 规范的编写方式是请求通常要么完全成功,要么完全失败。

      但是,可以对此应用一些细微差别。

      如果修改了服务器状态,并且打算像您这样的 HTTP 请求可以做一件或多件事情,我认为您可以认为这是“成功”,您应该返回 2XX 响应。

      如果我收到 4XX 响应,那么该请求应该完全失败

      【讨论】:

        【解决方案3】:

        当您返回 HTTP 状态 201 时,您应该返回在响应中创建的资源,如果操作失败,您一开始就不应该返回 201。

        无论如何,HTTP 状态码主要用于检查请求本身的状态,而不是其背后的逻辑。更好的方法是在请求本身成功时始终返回 200。在响应正文中,您可以返回有关操作的更多信息,例如操作是否成功的布尔值,以 JSON 格式。

        【讨论】:

          猜你喜欢
          • 2013-07-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-06-01
          • 1970-01-01
          • 2021-12-12
          • 2020-09-04
          • 2016-01-01
          相关资源
          最近更新 更多