rest - 通用 REST API:在一个请求中插入父项和子项
问题描述
我正在构建一个具有或多或少复杂资源的 REST API。
假设,我在幕后有以下数据库结构。
父基:id|name
ChildBase:id|name|parentId
因此,显然 childBase 的“parentId”列是 ParentBase 的 id 字段的外键。
是否允许在一个发布请求中与其父级创建一个子级并管理关系服务器端。我的有效载荷如下所示,网址为“/api/parents”:
{
id: <set by server>,
name: Homer,
{
id: <set by server>,
name: Lisa,
parentId: <set by server (Homer's id)>
}
}
还是我必须先使用自己的发布请求创建父级,然后获取返回的 id,将其设置为孩子的 parentId 并与孩子进行第二次发布请求?所以发送到 url “/api/parents”:
{
id: <set by server>,
name: Homer
}
现在我得到了 Homer 的 id=35,我可以用有效载荷向“/api/children”发送第二个请求:
{
id: <set by server>,
name: Lisa,
parentId: 35
}
那么什么是最佳实践呢?
(我正在使用带有 sqlachemy 和 marshmallow 的烧瓶。所以也许你也有提示如何使用这些框架解决这个任务)
解决方案
是否允许在一个发布请求中与其父级创建一个子级并管理 realtionship 服务器端。
就 REST 和 HTTP 而言,当然可以。
- 幕后数据结构的细节是实现细节,我们特意隐藏在 HTTP 门面后面;没有规定说您的资源模型必须与您的数据模型1:1 。
- 允许创建多个资源以响应单个请求
201(已创建)状态代码表示请求已完成并导致创建了一个或多个新资源。-- RFC 7231
推荐阅读
- python - builtins.TypeError:参数“img”的预期 cv::UMat
- swift - 跳到 for-in 循环中的索引
- c++ - 何时使用 =default 使析构函数默认?
- db2 - 这是 SQL GET DIAGNOSTICS 的正确行为吗?
- python - 如何在 Scrapy-Splash 中模拟鼠标点击
- javascript - ERR_STREAM_WRITE_AFTER_END 猫鼬错误
- php - 将分页添加到 wordpress 简码
- python - Python 记录器不打印信息
- javascript - 我想将一些代码移动到 react-native 的组件内部,但它会弄乱变量范围
- javascript - 在请求结束前使用 fetch 获取 HTTP 结果