JSON API扩展

JSON API扩展,json,ember.js,ember-data,json-api,Json,Ember.js,Ember Data,Json Api,我一直在关注JSON API,一直在关注可伸缩性场景。假设您有一个大型模型集合(1000个),每个模型都有3或4个关系 据我所知,JSON API要求您至少指定与其关联id的关系(并且可以选择将与的关系侧向加载到include)。如果1000个模型的集合必须对每个关系进行连接,才能填充有效的JSON API负载,如下所示: ... { "some_relationship_name": { data: [ { id: 1, type: "derp" } ...

我一直在关注JSON API,一直在关注可伸缩性场景。假设您有一个大型模型集合(1000个),每个模型都有3或4个关系

据我所知,JSON API要求您至少指定与其关联id的关系(并且可以选择将与
的关系侧向加载到include
)。如果1000个模型的集合必须对每个关系进行
连接
,才能填充有效的JSON API负载,如下所示:

...
{
  "some_relationship_name": {
    data: [
      { id: 1, type: "derp" }
      ...
    ]
  }
}

我看不出这怎么可能以任何合理的方式扩展。

我不确定你们在哪里可以看到这个问题。每个关系/4个关系/1000条记录有20个字节=>~100kB。现有适配器在足够快地处理此类数据方面应该没有问题

如果您需要传输更少的数据,有几种选择。您可以添加压缩,但要注意,对于这样小的数据,传输数据通常比压缩数据快


另一种选择是只发送您真正需要的数据。通常,您不需要立即在web应用程序中输入1000条记录。因此,分页和延迟加载应该可以帮助您只发送真正需要的数据

您不必指定关系的
id
s。您只需指定
链接
,即可提供获取链接的方法。结帐

所以你可以这样做:

{
    id: '1'
    type: 'base'
    relationships: {
        relA: {
            links: {
                self: '/base/1/relationships/relA',
                related: '/base/1/relationships/relA/related',
            }
        },
        ...
    }
    attributes: {...}
}

所以你不必加入任何你不直接需要的东西。例如,在列表中,您不加入仅在详细信息视图中需要的信息。

我应该更清楚。我不担心有效负载大小,我担心的是
JOIN
性能。通常,对于此类数据,除非您愿意,否则不必包含关系ID,但要符合JSON API,您必须这样做。