【问题标题】:What is the correct JSONAPI way to post multiple related entities in a single request?在单个请求中发布多个相关实体的正确 JSONAPI 方法是什么?
【发布时间】:2020-02-07 23:03:29
【问题描述】:

在我假设的应用程序的某个时刻,为了提高效率,我想在一个请求中创建多个不同类型的相关实体。在下面的示例中,我以包含有关新用户及其相关头像的数据的方式对请求进行序列化。

// POST /api/users
{
    data: {
        attributes: { ... },
        type: 'user',
        relationships: {
            avatar: {
                data: {
                    attributes: { ... }
                    type: 'avatar',
                }
            }
        }
    }
}

问题是,在 JSONAPI 中正确/推荐的方式(如果有的话)是什么?

【问题讨论】:

    标签: json-api


    【解决方案1】:

    JSON:API 规范尚不​​支持在单个请求中创建或更新多个资源。但是,对于即将发布的 v1.1 规范,有一个 Atomic Operations extension 的提议。

    但在大多数情况下,这样的功能并不是提高效率所必需的。您甚至可能通过将多个创建或更新请求捆绑为一个来增加服务器的负载。如今,使用 HTTP/2 并行执行多个请求很便宜。

    如果操作相互依赖,它可能不如使用一个请求执行此操作(例如,必须等待创建一个帖子才能创建该帖子的评论)。但在那种情况下,原子事务也是一个很强的要求。这是该扩展背后的主要驱动力。

    所以回答你的问题:

    • 目前在 JSON:API 规范中不支持。
    • 很有可能它会在下一个版本 (v1.1) 中通过扩展得到支持。
    • 如果效率是您寻找此类功能的唯一原因,您可能根本不需要它。

    【讨论】:

      【解决方案2】:

      由于它很常见,因此更多时候鼓励将 REST API 资源与内部表示分离,因此没有建议反对定义特定的“虚拟”端点,其中该资源的属性反过来将成为不同端点下的两个或多个不同资源。

      如果您一般都需要这样的功能,它可能无法解决您的问题,但如果只需要某些资源组合,您始终可以为包含所有相关资源的所有属性的资源创建一个专用端点。

      在你的情况下,它可能是这样的:

      // POST /api/users_with_avatar
      {
        data: {
          attributes: {
            "user_attribute_1": "...",
            "user_attribute_2": "...",
            "user_attribute_3": "...",
            "avatar_attribute_1": "...",
            "avatar_attribute_2": "..."
          },
          type: 'user-with-avatar'
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-09
        • 2018-04-19
        • 1970-01-01
        相关资源
        最近更新 更多