GraphQL 是一种查询语言,用于 API 的设计和查询。在 Web 开发中,GraphQL 已经成为了一个受欢迎的 API 解决方案。而 Deno 则是一个新兴的 JavaScript 运行时,通常用于构建服务端应用程序。本文将详细介绍在 Deno 中使用 GraphQL 构建 API 的实例解析。
安装 Deno 和 GraphQL 模块
在开始之前,需要先安装 Deno 和 GraphQL 模块,可以在 Deno 官方网站上下载并安装 Deno,然后使用以下命令来安装 GraphQL 模块:
deno install --allow-net --allow-read https://deno.land/x/graphql/cli.ts
创建一个 GraphQL Schema
一个 GraphQL Schema 可以理解为 API 的结构说明,可以用来定义 API 能够提供的操作和数据类型。在 Deno 中,可以使用 TypeScript 来定义 Schema。
// javascriptcn.com 代码示例 import { GraphQLSchema, GraphQLObjectType, GraphQLString } from "https://cdn.skypack.dev/graphql"; const queryType = new GraphQLObjectType({ name: "Query", fields: { hello: { type: GraphQLString, args: { name: { type: GraphQLString }, }, resolve: (_, { name }) => `Hello, ${name || "World"}!`, }, }, }); const schema = new GraphQLSchema({ query: queryType }); export default schema;
上面的代码中,我们导入了 GraphQL 相关的模块,然后定义了一个 Query 类型,该类型可以返回一个字符串,也可以接受一个 name 参数,最后将 Query 类型传递给 GraphQLSchema 构造函数来创建一个 GraphQL Schema。
构建一个 Deno 服务器
接下来,我们需要将我们的 Schema 应用到 Deno 服务器中。在 Deno 中,我们可以使用 HTTP 模块构建服务器。
// javascriptcn.com 代码示例 import { serve } from "https://deno.land/std/http/server.ts"; import { applyGraphQL } from "https://cdn.skypack.dev/deno-graphql"; import schema from "./schema.ts"; const PORT = 8000; const app = serve({ port: PORT }); console.log(`Server running on http://localhost:${PORT}`); for await (const req of app) { const { pathname, search } = new URL(req.url, `http://localhost:${PORT}`); if (pathname === "/graphql") { const result = await applyGraphQL({ schema, query: search, variables: {}, operationName: "", }); req.respond({ body: JSON.stringify(result) }); } else if (pathname === "/") { req.respond({ body: "Hello, Deno!" }); } else { req.respond({ body: "Not found" }); } }
上面的代码中,我们首先导入了 HTTP 模块和 deno-graphql 模块,同时我们也导入了之前定义的 Schema,然后创建了一个服务器,并且在服务器上监听了两个路径,“/graphql” 和 “/”,其中,如果路径为 “/graphql” 则使用 deno-graphql 库中的 applyGraphQL 函数来处理 Graphql 查询,如果路径为 “/” 则返回一个简单的字符串。
在浏览器中测试 GraphQL API
我们可以使用浏览器来测试我们的 GraphQL API。在浏览器中输入以下地址:“http://localhost:8000/graphql?query={hello}”,可以看到以下结果:
{ "data": { "hello": "Hello, World!" } }
这是一个 GraphQL 查询,我们通过浏览器的 URL 参数来传递查询。以上的查询表示从根查询中获取 hello 字段的值。同时我们也在查询中传递了一个 name 参数。
总结
到此为止,我们已经成功地在 Deno 中使用 GraphQL 构建了一个 API。在以上实例中,我们使用了 GraphQL 作为 API 的查询语言,并且使用了 Deno 作为运行环境。这些技术的结合,既可以满足现代 Web 应用程序的需求,也可以作为学习 GraphQL 和 Deno 的绝佳材料。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/653ab7727d4982a6eb4ec3c0