📌  相关文章
📜  graphql 将数组作为参数传递 (1)

📅  最后修改于: 2023-12-03 14:41:37.902000             🧑  作者: Mango

使用GraphQL将数组作为参数传递

GraphQL是一种新型的API查询语言,它允许客户端指定需要从API中获取的数据。GraphQL允许将数组作为参数传递,这极大地增强了GraphQL的查询功能,从而使您可以轻松地查询任何需要的数据。

数组参数的语法

GraphQL使用输入类型来定义允许传递的参数类型。输入类型可以是一个自定义类型或者是GraphQL提供的预定义类型之一。对于数组类型的参数,您可以使用GraphQL提供的预定义类型[类型]来定义它。

如下是一个使用数组作为参数的示例查询:

query {
  getBooks(filter: ["Engineering", "Science"]) {
    title
    author
  }
}

在上面的示例中,我们向getBooks查询中添加一个名为filter的参数,该参数是一个由字符串类型组成的数组。

解析数组参数

要在GraphQL解析器中处理数组类型的参数,您需要做以下两件事:

  1. 在GraphQL模式中定义该参数
  2. 在GraphQL解析器中将该参数解析为适当的类型

在GraphQL模式中定义数组参数,可以使用GraphQL Type Definition Language (SDL)。

在SDL中定义数组参数的语法如下所示:

[fieldName]([parameterName]: [parameterType]!): [returnType]

以使用数组参数的示例查询为例,以下是在SDL中定义参数filter的语法:

type Query {
  getBooks(filter: [String]!): [Book]
}

上述查询定义了一个名为getBooks的查询,该查询包含一个名为filter的参数,该参数是一个由字符串类型组成的数组。该参数的结尾处有一个!,表示此参数是必需的。返回类型是一个Book类型的数组。

在GraphQL解析器中,您可以将传入的数组参数转换为适合您的应用程序逻辑的类型。

以下是一个通过数组参数过滤图书的解析器示例:

const resolvers = {
  Query: {
    getBooks: (_, { filter }) => {
      const allBooks = [
        { title: "GraphQL for Dummies", author: "John Smith", genre: ["Technology", "Education"] },
        { title: "Programming with JavaScript", author: "Mary Johnson", genre: ["Technology", "Education"] },
        { title: "The Origin of Species", author: "Charles Darwin", genre: ["Science"] }
      ];

      const filteredBooks = allBooks.filter((book) => {
        return filter.every((genre) => book.genre.includes(genre));
      });

      return filteredBooks;
    }
  }
};

在上面的解析器中,我们使用filter参数来过滤图书数组并返回匹配的书籍。我们使用filter.every方法来检查书籍类型数组中是否包含全部的过滤类型。

结论

GraphQL允许您将数组作为参数传递,这极大地增强了查询的功能。定义和解析GraphQL数组参数的过程并不复杂,只需要理解SDL语法和解析器的基础知识即可。现在,您可以更轻松地使用GraphQL查询任何您需要的数据。