如果 Web API return 在成功完成后执行了 UPDATES 和 INSERTS,应该是什么 HTTP 状态代码?

What HTTP status code should a Web API return after successful completion, if it performed both UPDATES and INSERTS?

这是我之前 post 在

的跟进问题

我有一个 RESTful Web API(用 ASP .Net Core 2.1 编写),它从消费客户端应用程序接收 "change-log"。这是一个 JSON class,其中包含在客户端应用程序以离线模式工作时对数据库执行的所有修改。客户端应用程序上线后,它会通过发送 API 自上次同步以来发生的所有更改来将其数据库与 online/live 数据库同步。因此它向 API 发送一个 change-set/change-log,其中包含各种 tables/objects.

的一系列 UPDATE、INSERT 和 DELETE 列表

在 API 方面,我实际上并没有从实时数据库中删除任何内容 - 我只是将内容标记为已删除(因此我将布尔字段设置为 true,即 deleted = true)。所以从技术上讲,API 只对数据库执行插入和更新

API return 的操作方法在成功完成后应该是什么状态码?由于它结合了插入和更新,它应该 return 201 Created 吗?或者只是一个 200 OK?或者如果只执行了更新,则返回 200 OK,如果执行了任何插入,则返回 201?此外,在响应正文中,由于我实际上并不打算 returning 正文中的任何 ID 或对象(因为多个对象会被更新和插入),我想 return 只是简单说明更新了多少对象、插入了多少对象以及标记为已删除的对象的文本。这可能吗,甚至是个好主意?

谢谢

对于207, defined in the RFC 4918来说似乎是个好情况,HTTP协议的扩展:

11.1. 207 Multi-Status

The 207 (Multi-Status) status code provides status for multiple independent operations.

该文件还规定如下:

13. Multi-Status Response

A Multi-Status response conveys information about multiple resources in situations where multiple status codes might be appropriate. [...]

Although 207 is used as the overall response status code, the recipient needs to consult the contents of the multistatus response body for further information about the success or failure of the method execution. The response MAY be used in success, partial success and also in failure situations.

The multistatus root element holds zero or more response elements in any order, each with information about an individual resource. Each 'response' element MUST have an href element to identify the resource.

[...]

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

鉴于这更像是一个类似 RPC 的调用,我会 return 200 OK 简单地表明操作成功。

但是,有一种方法可以将它变成更像 REST 的东西。

如果您有多个资源,这些资源中的基础数据可以合并并表示在一个资源中,一种 'collection' 资源。

假设该资源托管在 /clientstate/<client-id>。对整个 'clientstate' 资源执行 GET return。

然后要更新此资源,您将使用 PUT 替换整个客户端状态。对于客户端来说,多个数据库记录绑定到一个资源是完全无关紧要的。

如果您使用 PUT 替换整个客户端状态,则相应的响应代码仍应为 200 OK。或者 204 No Content 如果你之后没有 return 任何有趣的事情。

我会 advise against 重新利用 207 Multi-Status