GraphQL 是一种用于 API 的查询语言,它是由 Facebook 开发的一种数据查询和操作语言。GraphQL 可以让客户端精确地指定需要的数据,避免了 REST API 中的过度获取或者缺少数据的问题。在本文中,我们将介绍如何使用 Deno 实现 GraphQL 的服务端和客户端。
什么是 Deno?
Deno 是一个安全的 TypeScript 运行时,由 Node.js 的创始人 Ryan Dahl 开发。Deno 具有更好的安全性和可维护性,它可以直接运行 TypeScript 文件,而不需要任何编译过程。Deno 还内置了类似于 Node.js 的模块系统,可以轻松地导入和使用第三方模块。
如何实现 GraphQL 的服务端?
要在 Deno 中实现 GraphQL 的服务端,我们需要使用一个称为 oak
的框架来处理 HTTP 请求和响应。我们还需要使用 graphql
库来构建 GraphQL 服务器。
首先,我们需要安装 oak
和 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
然后,我们可以编写一个简单的 GraphQL 服务器:
// javascriptcn.com 代码示例 import { Application, Router } from "https://deno.land/x/oak/mod.ts"; import { makeExecutableSchema } from "https://cdn.skypack.dev/graphql-tools"; const typeDefs = ` type Query { hello: String } `; const resolvers = { Query: { hello: () => "Hello, world!", }, }; const schema = makeExecutableSchema({ typeDefs, resolvers }); const app = new Application(); const router = new Router(); router.post("/graphql", async (ctx) => { const { query } = await ctx.request.body().value; const result = await graphql(schema, query); ctx.response.body = result; }); app.use(router.routes()); app.use(router.allowedMethods()); await app.listen({ port: 8000 });
在上面的代码中,我们首先定义了一个 GraphQL 的 schema,它包含了一个 hello
查询,返回了一个字符串 "Hello, world!"。然后,我们使用 makeExecutableSchema
函数将 schema 和 resolver 组合成一个可执行的 GraphQL schema。
接下来,我们使用 oak
框架来创建一个 HTTP 服务器,并将路由设置为 /graphql
。当客户端发送一个 POST 请求到 /graphql
,我们将提取请求体中的查询语句,并使用 graphql
库来执行查询。最后,我们将查询结果作为响应体发送回客户端。
现在,我们可以运行这个 GraphQL 服务器:
deno run --allow-net server.ts
然后,我们可以使用任何 GraphQL 客户端来测试这个服务器。例如,我们可以使用 curl
命令来发送一个 GraphQL 查询:
curl -X POST -H "Content-Type: application/json" -d '{"query": "{ hello }"}' http://localhost:8000/graphql
这将返回以下响应:
{"data":{"hello":"Hello, world!"}}
如何实现 GraphQL 的客户端?
要在 Deno 中实现 GraphQL 的客户端,我们需要使用一个称为 graphql-request
的库来发送 GraphQL 查询。该库可以将查询字符串发送到 GraphQL 服务器,并返回执行结果。
首先,我们需要安装 graphql-request
库:
deno install --allow-net --allow-read https://cdn.skypack.dev/graphql-request
然后,我们可以编写一个简单的 GraphQL 客户端:
// javascriptcn.com 代码示例 import { request } from "https://cdn.skypack.dev/graphql-request"; const endpoint = "http://localhost:8000/graphql"; const query = ` query { hello } `; const data = await request(endpoint, query); console.log(data);
在上面的代码中,我们首先定义了一个 GraphQL 查询字符串,它将查询服务器上的 hello
字段。然后,我们使用 graphql-request
库的 request
函数将查询字符串发送到服务器,并返回执行结果。最后,我们将结果打印到控制台。
现在,我们可以运行这个 GraphQL 客户端:
deno run --allow-net client.ts
这将返回以下响应:
{"hello":"Hello, world!"}
总结
在本文中,我们介绍了如何使用 Deno 实现 GraphQL 的服务端和客户端。我们使用了 oak
框架来处理 HTTP 请求和响应,并使用 graphql
库来构建 GraphQL 服务器。我们还使用了 graphql-request
库来发送 GraphQL 查询。这些技术可以帮助我们构建更加强大和灵活的 Web 应用程序,提高开发效率和用户体验。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/657aa3fdd2f5e1655d50ea16