是否存在一次性创建多个order子资源item的REST惯用方法?
REST API批量创建订单子项的惯用方法
当然有几种惯用的方法可以一次性创建一个或多个item资源,且不会影响已有的同级资源,无需多次调用单个创建接口:
1. 直接向集合端点POST数组请求体
这是最符合REST语义的常用方式,直接给POST /.../order/items接口传递包含多个item对象的数组,后端解析后批量创建每个子资源,且不会改动已有的item。
示例请求:
POST /.../order/items HTTP/1.1 Host: ... Content-Type: application/json [ { "name": "商品A", "price": 19.9, "quantity": 2 }, { "name": "商品B", "price": 29.9, "quantity": 1 } ]
成功响应可以返回201 Created,在响应体中列出每个创建成功的item的信息和资源地址,也可以把Location头指向订单的items集合:
HTTP/1.1 201 Created Host: ... Location: ...://.../order/items { "created_items": [ {"id": 2, "url": "...://.../order/items/2"}, {"id": 3, "url": "...://.../order/items/3"} ] }
2. 创建批量操作专用资源(适用于事务需求)
如果需要确保所有item要么全部创建成功,要么全部失败(事务性保障),可以新增一个批量操作的资源端点,比如POST /.../order/item-batches,请求体包含要创建的items数组。
示例请求:
POST /.../order/item-batches HTTP/1.1 Host: ... Content-Type: application/json { "items": [ {"name": "商品C", "price": 9.9, "quantity": 5}, {"name": "商品D", "price": 49.9, "quantity": 1} ] }
成功响应会返回这个批量操作资源的地址,同时在响应体中给出创建结果:
HTTP/1.1 201 Created Host: ... Location: ...://.../order/item-batches/1 { "status": "completed", "created_items": [ {"id":4, "url": "...://.../order/items/4"}, {"id":5, "url": "...://.../order/items/5"} ] }
3. 不推荐:用PATCH实现批量添加
虽然少数场景会用PATCH接口向集合中添加多个子资源,但这不符合PATCH的核心语义(PATCH是用于修改现有资源,而非创建新资源),容易造成接口语义混淆,不建议采用。
内容的提问来源于stack exchange,提问作者Jin Kwon
相关产品推荐
相关产品推荐

