【发布时间】:2014-11-20 12:00:16
【问题描述】:
背景:
我为希望使用我的网站下订单的人提供了一个编程接口。
他们可以使用/api/v1/orders 上的GET 和POST 方法下订单并查看他们下的所有订单的列表。他们还可以使用/api/v1/orders/<order_id> 上的GET 方法来查看一个订单的具体细节。
需要提供一种取消订单的方法,但需要保留记录本身。
我希望获得更多经验丰富的开发人员的反馈,以了解以下决定是否是一个明智的决定:
a) 在/api/v1/current_orders/<order_id> 上实现DELETE 动词,这会将其从“当前”订单列表中删除(将其标记为已取消)。缺点是它会使用不同的名词,这可能会造成混淆。
b) 在/api/v1/orders/<order_id> 上实现DELETE 动词,其功能与a) 中的相同。这有点误导,因为实体不会真正被删除,消费者应该意识到这一点。
c) 在/api/v1/cancellations/<order_id> 上实现POST 动词(或POST 在/api/v1/cancellations 上使用JSON 有效负载中的order_id)。这似乎不太理想,因为该请求不会创建资源。不过,使用这个端点的后果似乎更清楚了。
d) ...?
问题:
我知道为 REST API 设计端点并不总是有“完美”的解决方案,但请记住清晰和直观的需要高度重视最佳实践,哪些选项是“最佳的”?
【问题讨论】: