问题描述
我正在构建一个包含或多或少复杂资源的 REST API。
让我们说,我在幕后有以下数据库结构。
ParentBase:id|name
ChildBase:id|name|parentId
因此,childBase 的“parentId”列显然是 ParentBase 的 id 字段的外键。
是否允许在一次发布请求中与其父级创建子级并管理服务器端的realtionship。我的有效负载如下所示,网址为“/api/parents”:
{
id: <set by server>,name: Homer,{
id: <set by server>,name: Lisa,parentId: <set by server (Homer's id)>
}
}
或者我是否必须首先使用自己的发布请求创建父级,然后获取返回的 ID,将其设置为孩子的 parentId 并与孩子进行第二次发布请求? 所以发送到网址“/api/parents”:
{
id: <set by server>,name: Homer
}
现在我得到了 Homer 的 id=35,我可以用有效载荷向“/api/children”发送第二个请求:
{
id: <set by server>,parentId: 35
}
那么最佳实践是什么?
(我正在使用带有 sqlachemy 和 marshmallow 的烧瓶。所以也许你也知道如何使用这些框架解决这个任务)
解决方法
是否允许在一次发布请求中与其父级创建子级并管理服务器端。
就 REST 和 HTTP 而言,当然可以。
- 幕后数据结构的细节是实现细节,我们特意隐藏在HTTP Facade背后;没有任何规则规定您的资源模型必须与您的数据模型 1:1。
- 允许创建多个资源以响应单个请求
201(已创建)状态代码表示请求已完成并导致创建一个或多个新资源。 -- RFC 7231