gpt4 book ai didi

rest - 设计一个 RESTful api,用于一次创建资源及其相关资源

转载 作者:行者123 更新时间:2023-12-04 01:38:29 26 4
gpt4 key购买 nike

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

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

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

一种方法是提供两个 api

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

但是,订单和项目应该一起创建。因此,如果第二个 api 失败,它将创建一个没有任何项目的订单,这是我不想看到的情况。其实我是想让后台服务器做一个事务,一次性创建订单和商品,应该一起成功或者一起失败。

那么,将项目放在请求正文中,并且只向 api/orders 发送一次是不是一种好方法?或者对于这种情况还有其他更好的设计吗?

谢谢!

最佳答案

I want to know how to design a RESTFUL api for creating a resource and its related resources at once.

非常合理的事情。将注意力集中在如何向客户描述如何创建适当的请求,以及如何解释描述结果的文档。

线索在201 Created状态码的定义中

The 201 (Created) status code indicates that the request has been fulfilled and has resulted in one or more new resources being created. The 201 response payload typically describes and links to the resource(s) created.

(强调)

在网络的情况下,我们这样做的方式是有一个表单;客户将在表格中提供信息并提交。遵循表单处理标准的浏览器将生成一个 POST(因为语义不安全)请求,其中包含在消息正文中编码的表单数据和 header 中定义的适当内容类型(例如 application/x- www-form-urlencoded).

在术语中,响应将是一个 HTML 文档,其中包含指向所有已创建的有趣资源的链接。

它必须是 HTML 吗?不,当然不是——如果它适合您的需要,您可以使用 text/plain。当使用内置通用组件可以理解的链接概念的媒体类型时,您会有更好的长期前景。

关于rest - 设计一个 RESTful api,用于一次创建资源及其相关资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58552114/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com