首页 > 解决方案 > 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}

建立关系?关于获取数据的同样问题。应该总是检索所有孩子吗?我在网上找不到明确的答案。

标签: restrestful-architecture

解决方案


这个问题可以通过返回 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 实现示例,它的“儿童”部分对这种情况特别有帮助。


推荐阅读