常规 REST API:在一个请求中插入 Parent 和 Child

General REST API: Insert Parent and Child at one request

我正在使用或多或少复杂的资源构建 REST API。

这么说吧,我在幕后有以下数据库结构。

ParentBase: id|name

ChildBase: id|name|parentId

所以,显然 childBase 的列“parentId”是 ParentBase 的 id 字段的外键。

是否允许在一个 post 请求中使用其 parent 创建一个 child 并管理 realtionship 服务器端。我的有效负载如下所示,url 将是 "/api/parents":

{
  id: <set by server>,
  name: Homer,
  {
    id: <set by server>,
    name: Lisa,
    parentId: <set by server (Homer's id)>
  }
}

或者我是否必须首先使用自己的 post 请求创建 parent 然后获取返回的 ID,将其设置为 child 的 parentId然后用 child 做第二个 post 请求? 所以发送到 url "/api/parents":

{
  id: <set by server>,
  name: Homer
}

现在我得到了 Homer 的 id=35,我可以向“/api/children”发送第二个请求,有效负载为:

{
  id: <set by server>,
  name: Lisa,
  parentId: 35
}

那么最佳做法是什么?

(我正在将 flask 与 sqlachemy 和 marshmallow 一起使用。所以也许您也知道如何使用这些框架解决此任务)

Is it allowed to create a child with its parent at one post request and manage the realtionship serverside.

就 REST 和 HTTP 而言,当然可以。

  1. 幕后数据结构的细节是实现细节,我们有意隐藏在HTTP facade后面;没有规则规定您的资源模型需要1:1与您的数据模型
  2. 允许创建多个资源以响应单个请求

The 201 (Created) status code indicates that the request has been fulfilled and has resulted in one or more new resources being created. -- RFC 7231