我应该返回关联实体或整个实体的ID

时间:2016-09-25 09:35:38

标签: rest api-design

好的,我们假设我们有两个实体:个人资料,由id,名称和~10个不相关的字段组成,发布,由{{组成1}},text,它是title(个人资料)。此外,还有资源 / feed ,它返回包含来自不同配置文件的帖子的Feed。

所以我有两个选择:

  1. 在作者中发送完整的个人资料实体
  2. 发送作者的ID(有办法单独请求个人资料
  3. 哪种方式更快(就前端使用而言)更方便(RESTy,如果你愿意的话)。

1 个答案:

答案 0 :(得分:3)

显然,发送id Profile的速度更快,因为响应时间较短。

但重要的问题是,您是否需要每个Profile的完整Post对象?例如,如果您想打印出每个Post的作者姓名,那么发送完整对象会更有意义。但是,如果您只想为每个Post提供一个指向作者的链接(在前端),那么id就足够了。

对于查询您的Post的其他服务,只需发送id并让他们在需要时再拨打第二个电话。如果需要,他们总是可以在最后缓存数据。

尝试构建您的服务,以便每个呼叫/端点返回理解响应所需的最小数据量。这可能意味着Post包含精简Profile对象,其中仅包含名称,但排除了所有其他“无关”字段。但是,当您直接查询Profile时,您将获得完整的对象。

您还可以使用可选的查询参数,其中调用者可以指定他们是仅需要id还是完整的Profile,这是一种用于保留带宽和改进的策略Atlassian JIRA速度。

同时查看hal+json规范,它可以为您提供有关如何设计更实用,更透明的REST服务的好主意。

最重要!您的端点应该只返回外部世界可以实际使用和理解的数据。这意味着如果Profile有一个字段/字段,这些字段只在后端使用(例如,用户的密码),那么你就不应该泄露它们。