我正试图围绕如何设计一个 RESTful API 来创建对象图。例如,考虑一个电子商务 API,其中资源具有以下关系:
订单(主要对象)
- 拥有多个地址
- 有许多订单行项目(订单由什么组成)
- 有多次付款
- 有很多联系信息
Order 资源通常与它的关联一起有意义。孤立地看,它只是一个没有商业意义的愚蠢容器。但是,每个关联对象都有自己的生命,可能需要独立操作,例如。编辑订单的送货地址,更改订单的联系信息,在下订单后从订单中删除订单项等。
设计 API 有两种选择:
- Order API 端点通过处理发送到的内容中的“嵌套资源”智能地创建自己及其关联的资源
POST /orders
- Order 资源只创建自己,客户端必须向新创建的端点发出后续 POST 请求,例如
POST /orders/123/addresses
,PUT /orders/123/line-items/987
等。
虽然第二个选项在服务器端实现起来更简单,但它让客户端为 80% 的用例做额外的工作。
第一个选项有以下悬而未决的问题:
- 如何传达新创建资源的 URL?标
Location
头只能传达一个 URL,但是服务器可能会创建多个资源。 - 如何处理错误?如果其中一个关联有错误怎么办?我们是否拒绝整个对象图?该错误是如何传达给客户的?
处理这个问题的 RESTful + 务实的方式是什么?