如何在 Apollo GraphQL 中发出 foreach 请求?

How to make a foreach request in Apollo GraphQL?

我在 javascript 中有一个博客,我正在使用 Apollo GraphQL 来保存我的数据。我打算制作一个包含所有类别的六个帖子的列表。像这样:

[
  technology: [
    post1,
    post2,
    ...
  ],
  cook: [
    post1,
    post2,
    ...
  ],
  ...
]

但我做不到。我考虑获取所有类别的 ID 并提出一个大请求,如下所示:

{
  firstCategory: allPosts(where: {category: "firstId"}, first: 6) {
    ...fields
  }

  secondCategory: allPosts(where: {category: "secondId"}, first: 6) {
    ...fields
  }
}

但是如果我添加一个新类别,我必须更改我的代码。

您可以将 [先前查询的] 类别作为变量传递,例如:

query posts($firstCat: String, $secondCat: String, $limit: Int) {
  firstCategory: allPosts(where: {category: $firstCat}, first: $limit) {
    ...fields
  }
  secondCategory: allPosts(where: {category: $secondCat}, first: $limit) {
    ...fields
  }
}

变量:

{
  "firstCat": "technology",
  "secondCat": "cook",
  "limit": 6
}

当然还是限于n个准备好的别名

构建动态别名是可能的,但不建议 - source ... 应使用 AST 工具作为粘合字符串(直接或使用文字)被视为 滥用 GraphQL.

您也可以解构此组件,多个 <Category name="technology" /> 组件具有自己的内部查询(使用 props.name 作为类别过滤器变量)。这将提出单独的请求。

出于速度和 SEO 目的,您可以使用 gatsby(单独请求的数量无关紧要......达到一定规模) - 但是(与所有静态生成器一样)它需要 rebuild/redeploy 进行更改。

好 API 应该让您查询每个标签和相关帖子(按任何标准排序;...和作者[和他的帖子] ...等等 - 这是一个标准的 GraphQL 功能)。