Json api 在一个请求中发布多个相关实体的正确JSONAPI方法是什么?

Json api 在一个请求中发布多个相关实体的正确JSONAPI方法是什么?,json-api,Json Api,在我假设的应用程序中,为了提高效率,我希望在一个请求中创建多个不同类型的相关实体。在下面的示例中,我序列化了请求,使其包含关于新用户及其相关化身的数据 // POST /api/users { data: { attributes: { ... }, type: 'user', relationships: { avatar: { data: {

在我假设的应用程序中,为了提高效率,我希望在一个请求中创建多个不同类型的相关实体。在下面的示例中,我序列化了请求,使其包含关于新用户及其相关化身的数据

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

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

JSON:API规范还不支持在一个请求中创建或更新多个资源。然而,对于即将到来的规范v1.1,有一个建议

但在大多数情况下,这样的功能不是效率所必需的。通过将多个创建或更新请求捆绑到一个请求中,甚至可能会给服务器带来更多负载。现在,使用HTTP/2并行处理多个请求是很便宜的

如果操作相互依赖(例如,在创建此帖子的评论之前,必须等待帖子被创建),那么它的性能可能不如对一个请求执行此操作。但在这种情况下,原子事务也是一个强烈的要求。这是那个分机的主要驱动力

所以要回答你的问题:

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

由于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'
  }
}