【问题标题】:RESTful API and calling remote methods (RPC)RESTful API 和调用远程方法 (RPC)
【发布时间】:2014-08-08 16:33:07
【问题描述】:

因此,我正在对 RESTful API 进行一些研究,并试图弄清如何在资源上调用方法(本质上是 RPC)。

因此,如果我想在资源(订单)上调用方法(取消),从目前所见,我可以通过以下两种方式之一来实现:

POST /api/1/orders/123/cancel { }

POST /api/1/orders/123 { 'action' : 'cancel' }

希望这是有道理的?

我个人更喜欢前者,你只需输入 url 并调用方法,后者需要一些额外的 POST 参数工作。该方法所需的任何参数都将放在 POST 中吗?

我猜第三个是通过做:

PATCH /api/1/orders/123 { 'state' : 'cancelled' }

但我试图将订单(对象)的字段和方法分开。

【问题讨论】:

    标签: rest web architecture


    【解决方案1】:

    最好的选择是第四个,PATCH 将 resource 的状态字段设置为“取消”的订单

    PATCH /api/1/orders/123 { 'status' : 'cancel' }
    

    或许

    PUT /api/1/orders/123/status cancel
    

    后者的优点是非常容易链接到 html 表单并与它一起使用。

    【讨论】:

    • 但是'cancel'是一个动词(一种方法),'cancelled'是合适的状态。因此,调用“取消”会将“状态”更改为“已取消”。
    • 对不起...我没有关注你。也许我不够清楚,第一个示例中的 resource 正在被修补,将“状态”字段设置为“取消”。在第二个示例中,resource 被字符串“cancel”完全替换。
    • 就我个人而言,我会使用“状态”而不是“状态”来处理这样的事情......但这是一个完全不同的问题。但在任何一种情况下,您都不会使用动词作为状态,而是使用“取消”之类的形容词。
    • 所以在 OO 术语中,order.cancel()。如果取消订单比将订单状态设置为“已取消”需要更多时间会发生什么。使用您的方法,您必须检查正在修改的字段(在您的 PUT 请求中),然后映射到相应的取消函数。
    • 通过扩展,如果多个字段被影响,用户/客户端不应该知道这一点!
    猜你喜欢
    • 2015-07-01
    • 2018-04-06
    • 2012-05-10
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 2013-12-08
    • 1970-01-01
    相关资源
    最近更新 更多