rest - REST API 设计。检索和保存子记录
问题描述
我正在设计一个休息 api,我对从关系中暴露和消耗孩子有一些疑问。假设我有一个与实体 B 具有一对多关系的实体 A(因此 A 可以附加一些 B)并且我设计了一个端点来创建实体 A 和实体 A 的 DTO 包括实体 B 的列表并且用户提供了一个有效的,它也应该被保存吗?
示例:向某个端点发布帖子,例如 /api/v1/As
{
entityAfield1: someValue,
entityAfield2: someOtherValue
Bs: [
{
HERE a valid B payload
}
]
}
我还应该保存 B 并在 A 和 B 之间建立关系吗?如果B也有一些孩子怎么办?也应该保存吗?或者我应该只保存 A 并创建一个端点
/api/v1/As/{Aid}/Bs/{Bid}
建立关系?关于获取数据的同样问题。应该总是检索所有孩子吗?我在网上找不到明确的答案。
解决方案
这个问题可以通过返回 B 的 ID 来解决。这样,服务用户将决定是否检索相关资源的实际数据。
像这样与那些端点交互
/api/v1/Bs/{Bid}
可以使用,也可以使用更详细的
/api/v1/As/{Aid}/Bs/{Bid}
但是,过于嵌套的端点,例如
/api/v1/As/{Aid}/Bs/{Bid}/Cs/{Cid}/Ds/{Did}
应该避免并且很可能表明存在设计缺陷。
对于一般的树结构或多对多关系,应该公开表示链接的中间资源。Google有一个很好的 REST API 实现示例,它的“儿童”部分对这种情况特别有帮助。
推荐阅读
- r - dplyr 中的 if_all 和 if_any 函数未运行
- php - PHP/Jquery 多维数组
- javascript - 将 firebase 和 firebase 分析添加到 Web 应用程序。错误:Firebase:没有创建 Firebase 应用“[DEFAULT]”
- node.js - Google Billing API:订阅购买后不久,触发订阅过期,紧接着订阅续订
- amazon-connect - 是否有 websocket 连接的健康检查/验证 URL?
- azure-active-directory - 将 Power BI 连接到本地数据源
- javascript - Google表格脚本:如果子字符串在另一列中,则返回值
- reactjs - JsPdf-autotable 在同一行显示项目
- sql-server - 将非标准 varchar 转换为 DATETIME
- python - Windows API 调用不起作用:SaveBitmapFile