我知道PATCH应该更新现有资源,POST应该创建新资源。但是,我当前的端点必须同时更新和创建。
例如:买方向卖方支付购买物品的钱,因此他们的帐户余额应该发生变化,并且还应该创建一个新的支付交易。
我正在考虑在响应体中返回事务对象。我应该使用哪种方法?
通常PUT
是创建和更新的正确方法。
确定目标URI,则应使用POST
,如果客户端可以确定目标URI,则PUT
是最佳方法。
例如,如果这篇文章还不存在,PUT /article/hello-world
应该返回创建的201
,如果它存在并被替换,则返回204/200。
- 您正在创建一个新事务
- 这应该会影响现有账户的余额
很可能客户端不决定目标URI是什么。
在这种情况下,我主要是从事务的角度来考虑这个操作。如果你想传达一个事务对其他资源有影响,你可能想使用Link
头。
POST /transactions HTTP/1.1
Content-Type: application/json
{
"from": "/accounts/123",
"to": "/accounts/456",
"quantity": "55.00"
}
反应:
HTTP/1.1 201 Created
Location: /transactions/555513412
Link: </account/123>; rel="invalidates"
Link: </account/456>; rel="invalidates"
请注意,'invalidates'链接关系处于草案状态,但这是一个好主意,我在我们的api中使用了很多次