api - 当从具有超媒体约束的 REST API 提供响应时,如何向客户端指示要使用的 HTTP 方法(动词)?

标签 api rest architecture hateoas

我认为我已经很好地掌握了 RESTful 架构的原则,但我还没有做到。

我似乎无法弄清楚的部分是客户端如何知道每个资源可以使用哪些 HTTP 方法?当应用程序流中需要特定操作以继续流程时,该怎么办?

简化示例:

假设客户对我的 REST API 下了一个简单的订单。

客户端将向:http://api.mycompany.com/orders 发出 post 请求

请求有效载荷

<order>
    <items>
        <sku>12345</sku>
        <quantity>1</quantity>
    </items>
</order>

假设请求成功

响应负载
<order>
    <id>156</id>
    <status>Pending Payment</status>
    <items>
        <sku>12345</sku>
        <quantity>1</quantity>
    </items>    
    <links>
        <link rel="order" url="http://api.mycompany.com/orders/156" />
        <link rel="invoice" url="http://api.mycompany.com/payments/156" />
        <link rel="payment" url="http://api.mycompany.com/invoices/156" />
    </links>
</order>

如果我正确理解了超媒体约束,我会提供相应的资源,客户可以从那里选择去哪里。

在上面的示例中,带有 rel="order"的链接可以是 GET、PUT 或 DELETE 请求。带有 rel="invoice"的链接仅限于 GET 请求。带有 rel="payment"的链接将只接受 POST 请求。

客户怎么知道这个?我知道如果他们向上述资源之一发出 OPTIONS 请求,它应该为他们提供可用的方法,但我不确定这是否是处理这种情况的标准方法。

任何帮助将不胜感激。

最佳答案

一个简单的事实是,这些动词将记录在资源文档中。

您没有问的问题是,“客户如何知道 refs 'order'、'invoice' 和 'payment' 的用途?”。

然而,他们遇到了你问的同样的问题。而且它们也需要记录在案。

当这些被记录下来时,当这些 rels 被解释为它们是什么、它们为什么存在以及你作为资源消费者将使用它们做什么时,那么利用这些资源所需的实际动词也将与它们一起记录。

关于api - 当从具有超媒体约束的 REST API 提供响应时,如何向客户端指示要使用的 HTTP 方法(动词)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6219695/

相关文章:

api - Excel-自定义函数,Contoso.ADD42 函数未出现在 Excel 中

java - 平台间API代理的最佳实践

Azure DevOps SendMail Rest API 返回 204 但不发送电子邮件

rest - 如何在 Go 中执行带有正文的 GET 请求?

c# - 关于使用哪些服务以及按什么顺序的决定是否构成 MVC Controller 方法中的逻辑?

java - 我如何创建一个使用 Apache Spark 的 RESTFul 应用程序,特别是后端的 Streaming

asp.net-mvc-3 - ASP.NET MVC 3 限制 API 访问

c# - 我可以在 UriTemplate 中使用对象吗?

rest - 我可以提供与 spring-data-rest GET 并行的端点吗?

QT : Using State Machine for UI interactions?