前言
GraphQL 是一种用于 API 的查询语言和运行时环境,它使得客户端能够准确地获取其需要的数据,而且没有冗余和不必要的数据。Deno 是一个新兴的 JavaScript/TypeScript 运行时环境,它提供了一种安全的方式来运行 JavaScript 代码。在这篇文章中,我们将探讨如何在 Deno 中使用 GraphQL 进行数据交互。
安装
首先,我们需要安装 graphql
和 dgraphql
这两个 Deno 模块。可以使用以下命令来安装它们:
deno install --allow-net --allow-read https://deno.land/x/graphql/cli.ts deno install --allow-net --allow-read https://deno.land/x/dgraphql/cli.ts
创建 GraphQL Schema
在 Deno 中使用 GraphQL,我们需要先创建一个 GraphQL Schema。Schema 是一个描述数据结构的对象,它定义了可以查询的字段和类型。以下是一个简单的示例 Schema:
-- -------------------- ---- ------- ------ - --- - ---- -------------------------------------- ----- -------- - ---- ---- ----- - ------ ------- - -- ------ ------- ---------
这个 Schema 定义了一个 hello
字段,它返回一个字符串类型的值。我们可以使用 gql
函数来定义 Schema。
创建 Resolver
我们还需要创建一个 Resolver 来处理 GraphQL 查询。Resolver 是一个返回数据的函数,它与 Schema 中定义的字段相对应。以下是一个简单的示例 Resolver:
const resolvers = { Query: { hello: () => "Hello, world!", }, }; export default resolvers;
这个 Resolver 定义了一个 hello
函数,它返回字符串 "Hello, world!"
。
运行 GraphQL 服务器
现在我们已经定义了 Schema 和 Resolver,我们可以使用 dgraphql
命令来启动一个 GraphQL 服务器:
dgraphql server.ts
在这个命令中,server.ts
是我们定义的 GraphQL 服务器的入口文件。在这个文件中,我们可以将 Schema 和 Resolver 结合在一起:
import { makeExecutableSchema } from "https://deno.land/x/graphql_tools/mod.ts"; import resolvers from "./resolvers.ts"; import typeDefs from "./typeDefs.ts"; const schema = makeExecutableSchema({ typeDefs, resolvers }); export default schema;
在这个文件中,我们使用 makeExecutableSchema
函数来创建一个可执行的 Schema。我们将 Schema 和 Resolver 传递给这个函数,它会自动将它们结合在一起。
发起 GraphQL 查询
现在,我们已经启动了一个 GraphQL 服务器,我们可以使用任何 GraphQL 客户端来发起查询。以下是一个简单的示例,使用 graphql
命令来发起一个查询:
graphql '{ hello }' http://localhost:4000
在这个命令中,{ hello }
是我们要查询的字段,http://localhost:4000
是我们启动的 GraphQL 服务器的地址。当我们执行这个命令时,它会返回以下结果:
{ "data": { "hello": "Hello, world!" } }
结论
在这篇文章中,我们介绍了如何在 Deno 中使用 GraphQL 进行数据交互。我们通过创建一个 GraphQL Schema 和 Resolver,然后启动一个 GraphQL 服务器来实现这个目标。这个过程非常简单,而且可以使用任何 GraphQL 客户端来发起查询。如果你正在寻找一种简单而又强大的方式来处理数据交互,那么 GraphQL 和 Deno 是一个不错的选择。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6742d4ae99516187acd43eac