使用HTTP DELETE方法取消正在进行的操作

时间:2014-11-20 12:00:16

标签: api rest http

背景

我为希望使用我的网站下订单的人提供编程界面。

他们可以使用GET上的POST/api/v1/orders方法下订单并查看他们发出的所有订单的列表。他们还可以使用GET上的/api/v1/orders/<order_id>元词来查看一个订单的具体详情。

需要提供取消订单的方法,但需要保留记录本身。

我希望得到更多经验丰富的开发人员的反馈意见,以确定这是否是一个明智的决定:

a)DELETE上实施/api/v1/current_orders/<order_id>动词,该动词会将其从&#34;当前&#34;的列表中删除订单(将其标记为已取消)。缺点是它会使用不同的名词,这可能会令人困惑。

b)DELETE上实现/api/v1/orders/<order_id>动词,其功能与a中相同。这有点误导,因为实体不会真正被删除,消费者应该意识到这一点。

c)POST(或/api/v1/cancellations/<order_id> POST上使用JSON有效负载中的order_id实施/api/v1/cancellations动词。这似乎不太理想,因为该请求不会创建资源。但是,使用此端点的后果似乎更清晰。

d) ......?

问题:

我知道并不总是有一个完美的&#34;设计REST API端点的解决方案,但要记住清晰度直观性的需要,并高度重视最佳实践,< strong> 哪个选项是&#34;最佳&#34;

1 个答案:

答案 0 :(得分:3)

PATCH /api/v1/orders/<order_id>上的{ isCancelled:true}动词表示它被取消了怎么办?

HTTP PATCH:允许在实体中进行部分修改。当POST创建一个新的,PUT替换现有的,PATCH只更新你发送的属性,剩下的就是它们。

您只需要发送HTTP PATCH作为{{1}}之类的内容,然后您的代码就会更新实体并采取行动,例如取消任何未完成的工作。