📅  最后修改于: 2023-12-03 14:41:37.902000             🧑  作者: Mango
GraphQL是一种新型的API查询语言,它允许客户端指定需要从API中获取的数据。GraphQL允许将数组作为参数传递,这极大地增强了GraphQL的查询功能,从而使您可以轻松地查询任何需要的数据。
GraphQL使用输入类型来定义允许传递的参数类型。输入类型可以是一个自定义类型或者是GraphQL提供的预定义类型之一。对于数组类型的参数,您可以使用GraphQL提供的预定义类型[类型]
来定义它。
如下是一个使用数组作为参数的示例查询:
query {
getBooks(filter: ["Engineering", "Science"]) {
title
author
}
}
在上面的示例中,我们向getBooks
查询中添加一个名为filter
的参数,该参数是一个由字符串类型组成的数组。
要在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查询任何您需要的数据。