RESTful API 设计 - CRUD 操作。 & 可选操作,两者都在一个请求中?

RESTful API design - CRUD op. & optional action, both in one request?

所以我正在创建一个 RESTful API 来管理数据库中的订单列表。有一个创建订单的选项,然后用户可以 update/edit 订单并最终调用 POST /orders/{id}/send 端点来发送订单。

现在,我们发现很多时候我们不需要编辑订单,直接创建并发送即可。由于在前端处理多个顺序请求有点混乱,我认为创建和更新请求是个好主意。这会违反 RESTful 模式吗?

如果没有,最好的方法是什么(语义上)..是否适合只使用 create-method 有一个可选的 sendDirectly 查询或 header 参数?还是为此设置一个完全不同的端点更有意义?

你怎么看?

Since it's a bit messy to deal with multiple sequential request in the frontend I though it to be a good idea to make a Create & Update request.. would that go against the RESTful pattern?

不,不会。想想它在网络上的工作方式:有人导航到表单,填写信息,提交表单......然后后端对结果做任何处理。

Would it fit to just use the create-method have an optional sendDirectly query or header parameter?

资源标识符标识一个资源;查询是其中的一部分。所以你不应该用负载语义重载查询。

处理此问题的正常方法是在请求的有效负载架构中包含一个可选字段。在 Web 上,您可能会通过表单中的隐藏输入控件将此字段告知客户。

would it make more sense to have an entirely different endpoint for that?

也许吧,但可能不是。您通常想要做的是识别将被请求更改的主要资源,并将该资源的标识符用作请求的目标 uri,以便标准 cache invalidation rules 执行您想要的操作。

是的,这意味着您可能有多个表单使用相同的方法向同一资源提交不同的信息。您设计有效载荷,以便服务器可以区分它们,然后您在那里进行区分。

(注:OpenAPI 3好像不支持这样的documenting和API;“这是Swagger对API的看法的一个特点”。有时你必须选择妥协的地方。)