代码之家  ›  专栏  ›  技术社区  ›  Fabricio Rodriguez

如果Web API同时执行更新和插入,那么在成功完成之后,它应该返回什么HTTP状态代码?

  •  0
  • Fabricio Rodriguez  · 技术社区  · 7 年前

    这是我之前在 PUT or POST HTTP verb when calling API endpoint which performs both UPDATE and INSERT?

    我有一个RESTfulWebAPI(用ASP.NETCore2.1编写),它从消费客户端应用程序接收“更改日志”。这是一个JSON类,包含在脱机模式下运行的客户端应用程序上对数据库执行的所有修改。一旦客户端应用程序上线,它将通过向API发送自上次同步以来发生的所有更改,将其数据库与联机/实时数据库进行同步。因此,它向API发送一个变更集/变更日志,其中包含一系列针对各种表/对象的更新、插入和删除列表。

    成功完成后,API的操作方法应该返回什么状态代码?既然它同时执行插入和更新操作,那么它是否应该返回一个创建的201?或者只是一个200行吗?或者,如果只执行了更新,则为200 OK,如果执行了任何插入,则为201?另外,在响应主体中,由于我实际上不打算返回主体中的任何ID或对象(因为多个对象将被更新和插入),所以我只想返回纯文本,说明更新了多少对象,插入了多少对象,以及标记为删除了多少对象。这是可能的,还是一个好主意?

    谢谢

    2 回复  |  直到 7 年前
        1
  •  1
  •   Evert    7 年前

    对我来说,这听起来不像restapi。如果您要通过一个端点同时更新和创建多个资源,这有点违背REST原则。

    考虑到这是一个更像RPC的调用,我将返回 200 OK 只是表示手术成功。

    然而,有一种方法可以把它变成更像休息的东西。

    如果您有多个资源,那么这些资源中的基础数据可以组合在一个资源(一种“集合”资源)中表示。

    假设资源托管在 /clientstate/<client-id> . 做一个 GET

    然后要更新此资源,您将使用 PUT

    如果你使用 200行 . 或者也许 204 No Content

    我想要 advise against 重新定位 207 Multi-Status .

        2
  •  1
  •   cassiomolin    7 年前

    这对我来说似乎是个好情况 207 ,定义在 RFC 4918

    11.1. 207 Multi-Status

    207 (多状态)状态代码提供多个状态的状态

    该文件还规定:

    13. Multi-Status Response

    多状态响应传递有关多个资源的信息 在多个状态码可能合适的情况下。[...]

    作为总体响应状态代码 机构的成功或失败的进一步信息 成功和失败的情况下。

    multistatus 根元素包含零个或多个 response 元素 以任何顺序,每个都包含有关单个资源的信息。 每个“response”元素必须有一个 href 元素来标识 资源。