背景
我为希望使用我的网站下订单的人提供编程界面。
他们可以使用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; ?
答案 0 :(得分:3)
PATCH
/api/v1/orders/<order_id>
上的{ isCancelled:true}
动词表示它被取消了怎么办?
HTTP PATCH:允许在实体中进行部分修改。当POST创建一个新的,PUT替换现有的,PATCH只更新你发送的属性,剩下的就是它们。
您只需要发送HTTP PATCH
作为{{1}}之类的内容,然后您的代码就会更新实体并采取行动,例如取消任何未完成的工作。