2016-05-15 87 views
1

是否有向API消费者公开状态更新函数的约定?通过REST API设置状态

我有一个/订单端点,其中每个订单可以有一些国家,例如: 1 - 提交 2 - 等待 3 - 发货

客户可以提交订单,但随后工作人员将最终拥有自己的GUI改变订单状态。

我想知道,对于特定的顺序,例如/orders/123,使用PUT /orders/123{state: 2}消耗API会更好吗?

或者是否会更好地公开一些便利功能,如GET /orders/pending可以处理API使用者的设置状态?

+1

GET请求不应该改变你的数据的内部状态,所以如果你想有'GET/orders/pending'来更新订单的状态,那就是糟糕的设计。 – gevorg

回答

2

通常的做法是使用GET作为只读数据访问请求,PUT请求设置状态,更新和其他数据写入操作。

除了很常见之外,这种做法还有一个直观的附加好处,它可以很好地传达访问API的API和客户端代码的意图。

但是,请注意,PUT动词实际上是指替换为资源全部,而不是用于更新资源的任何单个属性。还有另一个HTTP动词 - PATCH - 这会更适合你的情况。

与其创建另一个HTTP动词引用副本,我想引用你到this tutorial,我发现它非常优秀和彻底。看一看PUTPATCH动词,以便为您的实施做出决定。

+1

PUT请求旨在替换/创建资源,而不是部分更新,即PATCH –

+0

@TimCastelijns这是一个很好的观点;我正在解决原始问题中引用的特定HTTP动词,但你说的没错,我会尽快更新我的答案以反映'PATCH'。 – CoolBots