我想围绕如何设计一个RESTful API来创建对象图形。例如,考虑一个电子商务API,在资源有以下关系:RESTful创建对象图形
订单(主要对象)
- 具有一对多的地址
- 具有一对多的订单行项目(哪些呢订单包括)
- 具有一对多的付款
- 具有一对多的联系方式
订单资源通常与其关联一起有意义。孤立地说,它只是一个没有商业意义的笨蛋容器。但是,每个关联对象都有自己的生命,可能需要独立操作,例如。编辑订单的送货地址,改变对一个订单的联系人信息,后从订单删除线项目已放置等
有两个选项用于设计API:
- 的订单API端点智能地发送到
POST /orders
- 的订单资源只创建本身和客户端必须进行后续POST请求到新创建的端点内容处理“嵌套资源”创建本身及其相关资源,如
POST /orders/123/addresses
,PUT /orders/123/line-items/987
,e tc
虽然第二个选项更容易在服务器端实现,但它使客户端为80%的用例做了额外的工作。
第一个选项有以下开放式问题:
- 一个人如何沟通,为新创建资源的网址是什么?
Location
标题只能传递一个URL,但服务器可能会创建多个资源。 - 如何处理错误?如果其中一个关联有错误会怎么样?我们拒绝整个对象图吗?这个错误如何传达给客户?
什么是RESTful +务实的方式来处理这个问题?
“通常有意义”意味着订单*可以*在没有其他资源的情况下存在吗?方案2的两个步骤之间的资源是否处于无效状态? – 2013-03-11 07:39:10
在创建订单时,80%的关联数据可用。但是,在20%的情况下,我们*可能*想要在DB中存储部分对象以在稍后阶段更新和处理。例如,我们可能想要跳过付款信息并稍后添加。 – 2013-03-11 07:50:00