我正在设计HTTP API。
我有一个具有Balance属性的Card资源,客户端可以添加/减去。
起初我认为这应该被实现为PUT,因为它是资源更新的一种形式,但后来我读到PUT是幂等的,但添加到数量并不是幂等的。
由于它不是对象的创建,我认为我将其称为控制器,如:
POST example.org/card/{card-Id}/AddToBalance
data: value=10
将余额加10。
有更好的方法吗?
答案 0 :(得分:1)
是的,像这样的用例不是REST擅长的地方(表达操作,特别是当它们只影响实体数据的一小部分时)。你的特殊情况非常简单,你可以通过对动词和端点稍作修改来处理它:
PUT example.org/card/{card-Id}/balance
{"value" : 100}
基本上读为"Update the balance of card {id} to 100"
。在服务器端,您仍然需要验证交易,并根据余额的现有价值确定其有效的添加。
答案 1 :(得分:0)
设计看起来和REST主体一样好。
PUT动作应该是幂等的。但这取决于你的要求
您可以使用 PATCH 的其他内容,因为您只是在进行部分更新,而不是完全替换资源。