gpt4 book ai didi

api - 每个资源具有多个命令的 REST API

转载 作者:可可西里 更新时间:2023-11-01 15:10:25 26 4
gpt4 key购买 nike

我有一个关于 REST API 设计的问题。这是一个简单的(可能太简单了)API:

GET /ecommerce/order/123

POST /ecommerce/order (create a new order)

PUT /ecommerce/order/123 (update an existing order)

DELETE /ecommerce/order/123 (cancel order)

但是,如果我希望客户输入取消订单的原因怎么办?我需要将发布数据发送到 API,但这不适用于 DELETE。为了满足这一点,我必须将 DELETE 更改为 PUT。然后我会发布两个不同的资源用于更新和取消。

另一种解决方案是更改 API:

GET /ecommerce/order/123

POST /ecommerce/order/create (create a new order)

PUT /ecommerce/order/update/123 (update an existing order)

DELETE /ecommerce/order/cancel/123 (cancel order)

我不确定哪个是最好的选择。

关于 REST API 如何处理单个资源的多个命令,有一个更普遍的问题。

任何输入将不胜感激!我很快就会阅读 REST in Practice,但这个问题一直困扰着我。

最佳答案

一个选项可能是创建一个新资源。 CancelledOrder,也许。

然后您可以POST一个新的CancelledOrder:

POST /ecommerce/cancelledOrder
Entity:
order: /ecommerce/order/123
reason: "Problem with order"

您也可以/代替 PUT CancelledOrder:

PUT /ecommerce/cancelledOrder/123
Entity:
reason "Problem with order"

然后应用程序可以删除订单 123 或将其状态更新为“已取消”,或者执行您的业务规则要求的任何操作。最重要的是,您无法直接为 /ecommerce/order/N 支持 DELETE 方法,返回 405 Method Not Allowed

PUT 解决方案可以利用幂等性来发挥其优势; PUT多次调用 CancelledOrder 仍然会导致订单被取消。

请注意,您更改 API 的建议(例如 /ecommerce/order/create)可能不是 RESTful,因为您是在资源标识符中定义方法。

关于api - 每个资源具有多个命令的 REST API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6335984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com