设计一次用于创建资源及其相关资源的RESTful api

问题描述 投票:0回答:1

我想知道如何设计一个RESTFUL api来一次创建资源及其相关资源。

例如,我想使用我的RESTFUL API创建一个包含项目列表的订单,例如:

{
    order_id:1,
    description: "XXX",
    items: [
        {item_id:1, price:30, ...},
        {item_id:2, price:40, ...}
    ]
}

一种方法是提供两个api

  1. 发布:api/orders =>创建新订单并返回订单ID
  2. post:api/orders/id/items =>使用order_id创建相关项目

但是,订单和商品应一起创建。因此,如果第二个api失败,它将创建一个没有任何物品的订单,这是我不想看到的情况。实际上,我希望后端服务器立即执行事务并创建订单和项目,所以应该一起成功或失败。

因此,将项目放入请求正文中,并且仅将其发布到api/orders上是一个好方法吗?还是针对这种情况还有其他更好的设计?

谢谢!

rest api post one-to-many orders
1个回答
1
投票

肯定是创建没有项目的订单-好主意。最终将产生不稳定的API和不一致的实体。另外,您不能使用api/orders URI create项目,因为这违反了REST原则的基础。

对于您的业务逻辑,REST API可能看起来像:

POST api/item
  {
    price: 40,
    name: "xxx",
    ...
  }
<<<<< 201
  {
    id: 1
  }

GET api/item/{id}
<<<<< 200
  {
    id: 4,
    price: 40,
    name: "xxx",
    ...
  }

POST api/order
  {
    description: "xxx",
    items: [
      {id: 1, count: 5},
      {id: 23456, count: 1}
    ]
  }
<<<<< 201
  {
    id: 123442
  }

我认为没有必要在创建订单请求正文时放入完整的项目。商品ID足以在后端创建订单商品绑定。

© www.soinside.com 2019 - 2024. All rights reserved.