GraphQL 是一种用于 API 开发的查询语言和运行时环境。Deno 是一个现代化的 JavaScript 运行时,可以用于服务器端和客户端的开发。在本文中,我们将学习如何利用 Deno 实现 GraphQL 服务器和客户端。
准备工作
在开始学习之前,需要先安装 Deno。可以从 https://deno.land/ 下载最新版本的 Deno。安装完成后,可以在终端中输入以下命令来验证:
$ deno --version
可以看到输出了 Deno 的版本信息。
安装 GraphQL 库
可以使用 Deno 内置的模块库管理器来安装 GraphQL 库。在终端中输入以下命令:
$ deno install --allow-net --allow-read https://deno.land/x/oak/mod.ts $ deno install --allow-net --allow-read https://cdn.skypack.dev/graphql
第一条命令用来安装 Oak,它是一个基于 Deno 的 Web 框架;第二条命令用来安装 GraphQL 库。
实现 GraphQL 服务器
以下是一个简单的 GraphQL 服务器实现。首先,创建一个名为 server.ts
的文件。
import { Application, Router } from "https://deno.land/x/oak/mod.ts"; import { graphql, buildSchema } from "https://cdn.skypack.dev/graphql"; // 定义 GraphQL schema const schema = buildSchema(` type Query { hello: String } `); // 定义 resolvers const root = { hello: () => { return "Hello World!"; }, }; // 创建应用实例 const app = new Application(); // 创建路由实例 const router = new Router(); // 处理 GraphQL 请求 router.post("/graphql", async (ctx) => { const requestBody = await ctx.request.body().value; const { query } = JSON.parse(requestBody); const response = await graphql({ schema, source: query, rootValue: root }); ctx.response.body = response; }); // 注册路由 app.use(router.routes()); app.use(router.allowedMethods()); // 启动服务器 console.log("Server started at http://localhost:8000"); await app.listen({ port: 8000 });
在这个例子中,我们使用 GraphQL 的 buildSchema
方法来定义 schema。其中,我们定义了一个名为 hello
的查询,它返回一个字符串。我们还定义了一个名为 root
的对象,它包含了一个名为 hello
的函数,它返回字符串 "Hello World!"
。最后,我们创建了一个 HTTP 服务器实例,并处理了 GraphQL 请求。
启动服务器:
$ deno run --allow-net server.ts
现在,在浏览器中输入 http://localhost:8000/graphql 地址,可以看到 GraphQL Playground,可以在左侧的面板中输入查询语句:
query { hello }
点击运行按钮,可以看到返回结果:
{ "data": { "hello": "Hello World!" } }
实现 GraphQL 客户端
以下是一个简单的 GraphQL 客户端实现。首先,创建一个名为 client.ts
的文件。
import { send } from "https://deno.land/std/http/mod.ts"; // GraphQL 查询 const query = ` query { hello } `; // 发送 GraphQL 查询 const response = await send("http://localhost:8000/graphql", { method: "POST", body: JSON.stringify({ query }), }); // 处理响应 const responseData = await response.json(); console.log(responseData.data.hello);
在这个例子中,我们使用 Deno 内置的 send
函数来发送 GraphQL 查询。我们发送的查询与上一节中类似,也是查询 hello
字段。发送完毕后,我们处理响应,并输出结果。
运行客户端:
$ deno run --allow-net client.ts
可以看到输出了字符串 "Hello World!"
。
总结
本文介绍了如何使用 Deno 实现 GraphQL 服务器和客户端。我们使用了 Deno 内置的模块库管理器来安装 GraphQL 库,并使用了 buildSchema
和 graphql
方法来定义 schema 和处理 GraphQL 请求。此外,我们还使用了 Deno 内置的 send
函数来发送 GraphQL 查询。这些技术可以帮助我们更方便地开发 GraphQL 应用程序。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65ab4594add4f0e0ff4e596c