GraphQL API 的高级查询(queries)

页面摘要: Strapi 的 GraphQL API 中的高级查询,通过嵌套选择集(selection sets)获取多级关联,并通过自定义解析器链(resolver chains)在多个解析器间复用逻辑并应用特定于上下文的行为。

Strapi 的 GraphQL API 会自动解析许多查询,但复杂的数据访问可能需要更深层的关联获取或解析器链式调用。本简短指南说明了如何处理此类高级场景。

更多信息请参阅 GraphQL 定制 文档。

多级查询(Multi-level queries)

使用嵌套选择集来获取多层级的关联,如下例所示:

{
  restaurants {
    documentId
    name
    categories {
      documentId
      name
      parent {
        documentId
        name
      }
    }
  }
}

GraphQL 插件会自动解析嵌套关联。如果需要在某个特定层级应用自定义逻辑,可为该字段创建一个自定义解析器。

解析器链(Resolver chains)

自定义解析器可以调用其他解析器,以复用已有逻辑。一种常见模式是在父解析器中解析权限或上下文数据,再将其传递给子解析器,如下例所示:

export default {
  Query: {
    restaurants: async (parent, args, ctx) => {
      const documents = await strapi.documents('api::restaurant.restaurant').findMany(args);
      return documents.map(doc => ctx.request.graphql.resolve('Restaurant', doc));
    },
  },
};

在此例中,父解析器使用 文档服务 API 获取餐馆数据,然后将处理委托给插件生成的 Restaurant 解析器,从而保留字段选择等默认行为。

聚合(aggregations)尚不可用

GraphQL 聚合(aggregations)尚未在 @strapi/plugin-graphql 中实现。详见 GraphQL 高级用例 了解详情与变通方案。