常规REST API:在一个请求中插入父级和子级



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

比方说,我有下面的后台数据库结构。

ParentBase:id|name

ChildBase:id|name|parentId

所以,显然列";parentId";childBase的是ParentBase的id字段的foreignKey。

是否允许在一次post请求中与其父级创建一个子级并管理realtionship服务器端。我的有效载荷将如下所示,并且url将是"/api/家长":

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

或者我必须先用自己的post请求创建父级,然后获取返回的id,将其设置为child的parentId,然后对child进行第二次post请求?所以发送到url"/api/家长":

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

现在我得到Homer的id=35,并且我可以向"/api/儿童";有效载荷:

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

那么,什么是最佳实践呢?

(我使用的是带有sqlachemy和棉花糖的flask。所以也许你也有一个提示,如何用这些框架解决这个任务(

是否允许在一次post请求中与其父级创建子级并管理realtionship服务器端。

就REST和HTTP而言,这是肯定的。

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

201(已创建(状态代码表示请求已完成,并导致创建了一个或多个新资源。--RFC 7231