【问题标题】:How do you handle limiting coalesce requests?您如何处理限制合并请求?
【发布时间】:2015-11-29 16:46:57
【问题描述】:

使用 JSONAPI 适配器。

我有两篇文章。在 Ember 模板中:

{{#each articles as |article|}}
  {{article.comments}}
{{/each}}

启用coalesce。如果每篇文章都有100cmets。 Ember Data 将执行:

comments?filter[id]=1,2,3,4,5,6…200

处理comments?filter[id] 的端点预计会收到X 个ID。 API 端点暴露给任何试图这样做的人:

comments?filter[id]=1,2,3,4,5,6…9999999

这将对数据库造成很大负担。你如何处理这种情况?

【问题讨论】:

  • 我们用 cmets?page=1 处理它,然后加载更多得到 page=2。从未见过这样的分页方法:O
  • 你指的是哪种分页方式,你没见过?

标签: ember.js ember-data ember-cli json-api


【解决方案1】:

如果您只是想获取给定文章的所有 cmets,JSON API 允许服务器为每个文章资源提供 "related" 链接。

也就是说,如果你请求(例如)GET /articles/1,服务器可以返回:

{
  "data": {
    "type": "articles",
    "id": "1",
    "attributes": { /* data for your article */ },
    "relationships": {
      "comments": {
        "links": {
          // the uri below should all the article's comments 
          // as primary data
          "related": "http://SOME_URI_HERE..." 
        }
      }
      /* other relationships would follow ... */
    }
  }
}

然后,Ember Data 可以(我认为)被告知只需点击相关链接即可加载所有 cmets。但是,如果您的服务器不支持 "related" 链接,或者如果您确实需要通过 id 找到 cmets 的随机子集(使用 filter[id]),那么这也取决于服务器来确保没有提供许多 ID。 (因此,如果提供了超过 X 个 id,则允许服务器使用 JSON API 错误格式响应错误。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多