【问题标题】:Using HTTP DELETE method to cancel an action in progress使用 HTTP DELETE 方法取消正在进行的操作
【发布时间】:2014-11-20 12:00:16
【问题描述】:

背景:

我为希望使用我的网站下订单的人提供了一个编程接口。

他们可以使用/api/v1/orders 上的GETPOST 方法下订单并查看他们下的所有订单的列表。他们还可以使用/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 设计端点并不总是有“完美”的解决方案,但请记住清晰直观的需要高度重视最佳实践哪些选项是“最佳的”

【问题讨论】:

    标签: api rest http


    【解决方案1】:

    /api/v1/orders/<order_id>上的PATCH动词表示取消了怎么办?

    HTTP PATCH :允许在实体中进行部分修改。 POST 创建一个新的,PUT 替换现有的,PATCH 只是更新您发送的属性,其余的保留原样。

    您只需将{ isCancelled:true} 之类的内容发送为HTTP PATCH,然后您的代码将更新实体并采取诸如取消任何未完成的工作之类的操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-10
      • 2011-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-25
      • 2019-01-07
      相关资源
      最近更新 更多