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

Bil*_*l H 5 architecture api rest hateoas

我认为我对RESTful架构的原则有很好的把握,但我还没有.

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

简化示例:

假设客户端向我的REST API下了一个简单的订单.

客户将发送邮件请求:http://api.mycompany.com/orders

请求有效负载

<order>
    <items>
        <sku>12345</sku>
        <quantity>1</quantity>
    </items>
</order>
Run Code Online (Sandbox Code Playgroud)

假设请求成功

响应有效负载

<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>
Run Code Online (Sandbox Code Playgroud)

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

在上面的例子中,rel ="order"的链接可以是GET,PUTDELETE请求.与rel ="invoice"的链接仅限于GET请求.与rel ="payment"的链接只接受POST请求.

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

任何帮助将不胜感激.

Wil*_*ung 6

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

你没有问过的问题是,"客户如何知道裁判的'订单','发票'和'付款'是什么?".

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

当记录这些内容时,当这些相关内容被解释为它们是什么,它们存在的原因以及您作为资源消费者将使用它们的内容时,那么利用这些资源所需的实际动词也会被记录下来.