rest - 我应该返回关联实体还是整个实体的 id

标签 rest api-design

好的,假设我们有两个实体:简介 , 由 id 组成, name 和 ~10 个不相关的字段,以及 发表 , 由 text 组成, title , 它是 author (轮廓)。此外,还有资源/feed 返回包含来自不同配置文件的帖子的提要。

所以我有两个选择:

  • 发送完整简介 作者中的实体
  • 发送作者id(有一种方法可以单独请求个人资料)

  • 哪种方式更快(在前端使用它)和更方便(RESTy,如果你喜欢)。

    最佳答案

    显然只是发送idProfile更快,因为响应长度更小。

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

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

    尝试构建您的服务,以便每个调用/端点返回 最低限度 理解响应所需的数据量。这可能意味着 Post包含精益 Profile仅包含名称但排除所有其他“不相关”字段的对象。但是当您查询 Profile直接,你得到完整的对象。

    你也可以有一个可选的查询参数,调用者可以指定他们是否只需要id。或完整的Profile ,这是一个策略Atlassian JIRA用于保留带宽和提高速度。

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

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

    关于rest - 我应该返回关联实体还是整个实体的 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39685396/

    相关文章:

    api - 接受 POST 请求时添加单个或多个 API 端点?

    javascript - 使用 angularjs 无法从 json 文件获取数据

    rest - 如何使用空实体通过 Jersey REST 客户端调用 PUT

    c++ - 如何限制构造生命周期更长的对象所需的变量范围?

    c++ - 提高可读性的 C++ 结构,计算结果为非宏

    ruby-on-rails - API 设计 - json_api 不返回数据的最佳实践

    web-services - 什么是呈现表单的 RESTful 方式?

    java - 如何处理 Spring MVC 中的 400 错误

    java - REST 网络服务 : Server responding with a JAX-B error to GET

    rest - HTTP API : Communicating the need to authenticate to a third party