GraphQL 是一种用于 API 的查询语言,它可以提高 API 的灵活性和可靠性。在前端开发中,GraphQL 已经成为了一个非常热门的技术。而在 Deno 中实现 GraphQL 服务,也是一个非常有意义的事情。本文将介绍如何在 Deno 中实现 GraphQL 服务。
准备工作
在开始之前,我们需要先安装一些工具。首先,我们需要安装 Deno,可以通过以下命令进行安装:
curl -fsSL https://deno.land/x/install/install.sh | sh
安装完成后,我们还需要安装一些 Deno 的依赖,包括 graphql
和 oak
,可以通过以下命令进行安装:
deno install --allow-read --allow-net --import-map=https://deno.land/x/graphql/import_map.json https://deno.land/x/graphql/cli.ts
创建 GraphQL 服务
在开始创建 GraphQL 服务之前,我们需要先创建一个数据源。在本文中,我们将使用一个简单的数据源,它包含了一个 users
数组,每个数组元素都包含了一个 name
和一个 email
属性。我们将使用这个数据源来演示如何创建 GraphQL 服务。
首先,我们需要创建一个 data.ts
文件,用于存储数据源:
export const users = [ { name: "张三", email: "zhangsan@example.com" }, { name: "李四", email: "lisi@example.com" }, { name: "王五", email: "wangwu@example.com" }, ];
然后,我们需要创建一个 schema.ts
文件,用于定义 GraphQL 的 schema:
import { gql } from "https://deno.land/x/graphql/mod.ts"; export const typeDefs = gql` type User { name: String email: String } type Query { users: [User] } `;
在这个 schema 中,我们定义了一个 User
类型和一个 Query
类型。User
类型包含了一个 name
和一个 email
属性,Query
类型包含了一个 users
属性,用于查询所有的用户信息。
接下来,我们需要创建一个 resolvers.ts
文件,用于定义 GraphQL 的 resolvers:
import { users } from "./data.ts"; export const resolvers = { Query: { users: () => users, }, };
在这个 resolvers 中,我们定义了一个 users
resolver,用于返回所有的用户信息。
最后,我们需要创建一个 server.ts
文件,用于创建 GraphQL 服务:
import { Application, Router } from "https://deno.land/x/oak/mod.ts"; import { applyGraphQL } from "https://deno.land/x/graphql/mod.ts"; import { typeDefs } from "./schema.ts"; import { resolvers } from "./resolvers.ts"; const app = new Application(); const router = new Router(); const GraphQLService = await applyGraphQL({ Router: router, typeDefs: typeDefs, resolvers: resolvers, }); app.use(router.routes()); app.use(router.allowedMethods()); app.use(GraphQLService.routes(), GraphQLService.allowedMethods()); console.log("Server started on http://localhost:4000"); await app.listen({ port: 4000 });
在这个 server 中,我们首先创建了一个 Application
实例和一个 Router
实例,然后使用 applyGraphQL
函数创建了一个 GraphQL 服务。最后,我们将路由和 GraphQL 服务添加到应用程序中,并监听 4000
端口。
测试 GraphQL 服务
现在,我们已经创建了一个 GraphQL 服务,接下来,我们可以使用 GraphQL 的客户端来测试这个服务。在本文中,我们将使用 curl
命令来测试 GraphQL 服务。
首先,我们可以通过以下命令来查询所有的用户信息:
curl -X POST http://localhost:4000/graphql \ -H "Content-Type: application/json" \ -d '{"query": "{ users { name email } }"}'
这个命令将返回以下结果:
{"data":{"users":[{"name":"张三","email":"zhangsan@example.com"},{"name":"李四","email":"lisi@example.com"},{"name":"王五","email":"wangwu@example.com"}]}}
我们还可以通过以下命令来查询单个用户信息:
curl -X POST http://localhost:4000/graphql \ -H "Content-Type: application/json" \ -d '{"query": "{ user(name: \"张三\") { name email } }"}'
这个命令将返回以下结果:
{"data":{"user":{"name":"张三","email":"zhangsan@example.com"}}}
总结
本文介绍了如何在 Deno 中实现 GraphQL 服务。我们首先创建了一个数据源,然后定义了 GraphQL 的 schema 和 resolvers,最后创建了一个 GraphQL 服务。通过本文的示例代码,我们可以了解到如何在 Deno 中使用 GraphQL,并可以进一步探索 GraphQL 在前端开发中的应用。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65c078d9add4f0e0ffa63238