我正在设计一个休息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}
创建关系? 关于获取数据的同样问题。应该总是找回所有孩子吗?我无法在网上找到明确的答案。
答案 0 :(得分:0)
可以通过返回B的ID来解决问题。这样,服务用户将决定是否检索相关资源的实际数据。
与这样的端点进行交互
/api/v1/Bs/{Bid}
可以使用,也可以使用更详细的
/api/v1/As/{Aid}/Bs/{Bid}
但是,嵌套的端点太多,比如
/api/v1/As/{Aid}/Bs/{Bid}/Cs/{Cid}/Ds/{Did}
应该避免,并且很可能表明存在设计缺陷。
对于树结构或一般的多对多关系,应该公开表示链接的中间资源。 Google提供了a good example REST API实现,其中包含了#34;儿童"部分对这种情况特别有帮助。