我认为我对RESTful架构的原则非常了解,但我还没有。
我似乎无法弄清楚的部分是客户如何知道每种资源可用的HTTP方法?如何在应用程序流中需要特定操作来继续进程?
简化示例:
假设客户端向我的REST API下了一个简单的订单。
客户将发布邮件请求:http://api.mycompany.com/orders
请求有效负载
<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 请求,它应该给他们可用的方法,但我不确定这是否是处理这种情况的标准方法。
非常感谢任何帮助。
答案 0 :(得分:6)
简单的事实是,这些动词将记录在资源的文档中。
您没有问的问题是,“客户如何知道裁判的'订单','发票'和'付款'是什么?”。
然而,他们遇到了同样的问题。而且他们也需要记录在案。
当记录这些内容时,当这些相关内容被解释为它们是什么,它们存在的原因以及您作为资源消费者将使用它们的内容时,那么利用这些资源所需的实际动词将被记录为好。
答案 1 :(得分:0)
客户端可以在您公开的任何URI上调用任何HTTP谓词。这些行动是否会产生任何影响是一个单独的问题。
客户端可以通过不同方式发现哪些方法可以在特定URI上运行:
405 - Method Not Allowed
。老实说,我从未见过#1在生产系统中实现过。 #2是我和大多数人必须编写使用REST API的客户端最有意义的。
请注意,使用REST API不仅仅是知道要使用哪个HTTP谓词。媒体类型的内容和结构(对于请求和响应)对于记录并提供给计划对您的系统进行编码的人来说同样重要。