通过将 qql 应用于 graphql 查询代码获得的对象是 graphql 的 AST(抽象语法树)。这个 AST 通常与 apollo-client 一起使用来执行请求。但是,您可以使用任何其他能够使用 AST 执行 GraphQL 请求的库。
假设您愿意使用 Apollo,下面是他们网站上的示例 (https://www.apollographql.com/docs/react/data/queries)。
import { gql, useQuery } from '@apollo/client';
const GET_DOGS = gql`
query GetDogs {
dogs {
id
breed
}
}
`;
function Dogs({ onDogSelected }) {
const { loading, error, data } = useQuery(GET_DOGS);
if (loading) return 'Loading...';
if (error) return `Error! ${error.message}`;
return (
<select name='dog' onChange={onDogSelected}>
{data.dogs.map((dog) => (
<option key={dog.id} value={dog.breed}>
{dog.breed}
</option>
))}
</select>
);
}
此示例适用于带有钩子的 React(这是使用 Apollo 的主要方式)。如果您仍然想使用 Apollo 但不使用 React,那么您可以使用裸 ApolloClient 并仍然使用您的 AST 来运行查询。请参阅下面的链接以了解如何直接使用 ApolloClient。
https://www.apollographql.com/docs/react/api/core/ApolloClient/
最后,如果您不愿意使用 Apollo 和/或 AST,您可以直接执行查询。在这种情况下,您不需要使用 gql 并将其解析为 AST。请参阅下面的简化但有效的示例。
const query = `
query($id: Int!) {
user(id: $id) {
id
login
email
}
}
`;
const variables = {
id: 5
};
const result = await fetch("http://your-graphql-backend.tld", {
method: "POST",
body: JSON.stringify({
query,
variables,
}),
headers: {
"content-type": "application/json",
}
});
注意:上面的实现(尤其是查询部分)取决于您的 GraphQL 架构和后端实现。它可能有所不同,但原则上,这应该适用于大多数现代 graphql 后端。