GraphQL 是一种用于 API 的查询语言,它允许客户端精确地指定需要的数据,从而避免了传统 REST API 中出现的 over-fetching 和 under-fetching 问题。Deno 是一个新兴的 JavaScript 和 TypeScript 运行时,它具有快速、安全和轻量级的特点,并且不需要使用 npm 包管理器。在本文中,我们将探讨如何使用 Deno 构建 GraphQL API,从底层到高端,包括如何设计和实现 GraphQL Schema、如何构建 GraphQL Resolvers 和如何使用 Deno 中的第三方库来提高开发效率。
设计和实现 GraphQL Schema
GraphQL Schema 是定义 GraphQL API 的核心部分,它指定了可查询的字段、类型和操作。在 Deno 中,我们可以使用 graphql-js 这个第三方库来创建和操作 GraphQL Schema。首先,我们需要定义一个 GraphQL Schema 对象,然后使用 GraphQLObjectType
、GraphQLInputObjectType
和 GraphQLScalarType
等类型来定义字段和类型。例如,下面是一个简单的 GraphQL Schema,它定义了一个 Person
对象类型和一个 Query
操作类型:
------ - ------------------ -------------- ------------- - ---- ---------- ----- ---------- - --- ------------------- ----- --------- ------- - ----- - ----- ------------- -- ---- - ----- ------------- -- -- --- ----- --------- - --- ------------------- ----- -------- ------- - ------- - ----- ----------- ----- - ----- - ----- ------------- -- -- -------- ------ ----- -- - ------ - ----- ---------- ---- ---- -- -- -- -- --- ----- ------ - --- --------------- ------ ---------- ---
在上面的代码中,我们定义了一个 PersonType
对象类型,它有两个字段:name
和 age
,它们都是字符串类型。然后,我们定义了一个 QueryType
操作类型,它有一个 person
字段,它需要一个 name
参数,返回一个 PersonType
对象。在 resolve
函数中,我们根据传入的 name
参数返回一个 Person
对象。最后,我们创建了一个 GraphQL Schema 对象,并将 QueryType
作为其根查询类型。
构建 GraphQL Resolvers
GraphQL Resolvers 是实现 GraphQL Schema 中字段的具体行为的函数。它们接收查询参数、上下文对象和查询信息,并返回查询结果。在 Deno 中,我们可以使用 graphql-js
中的 resolve
函数来实现 GraphQL Resolvers。例如,我们可以将上面的 person
字段的 resolve
函数改写为一个异步函数,并从数据库中获取 Person
对象:
------ - ------------------ -------------- ------------- - ---- ---------- ----- ---------- - --- ------------------- ----- --------- ------- - ----- - ----- ------------- -- ---- - ----- ------------- -- -- --- ----- --------- - --- ------------------- ----- -------- ------- - ------- - ----- ----------- ----- - ----- - ----- ------------- -- -- -------- ----- ------ ----- -------- -- - ----- ------ - ----- -------------------------------------- ------ - ----- ------------ ---- ---------- -- -- -- -- --- ----- ------ - --- --------------- ------ ---------- ---
在上面的代码中,我们从上下文对象中获取了一个 db
属性,它是一个数据库连接对象。然后,我们使用 getPersonByName
函数从数据库中获取 Person
对象,并返回它的 name
和 age
字段。
使用 Deno 中的第三方库
Deno 不依赖于 npm 包管理器,但是它有自己的第三方库管理系统,称为 Deno 标准库。在 Deno 中,我们可以使用 import
语句来导入标准库中的模块,例如 http
、fs
和 path
等模块。此外,我们还可以使用第三方库,例如 oak
、djwt
和 deno-postgres
等库,它们都可以通过 URL 导入。例如,我们可以使用 oak
库来创建一个 HTTP 服务器,并在其中运行 GraphQL API:
------ - ------------ ------ - ---- --------------------------------- ------ - ----------- - ---- ----------------------------------------- ----- --- - --- -------------- ----- ------ - --- --------- ----------------------- ------------- ------- -------- ----- -- -- - ----- -- - ----- -------------------- ------ - -- -- -- ---- ------------------------- ----- ------------ ----- ---- ---
在上面的代码中,我们首先创建了一个 Application
对象,并创建了一个 Router
对象。然后,我们使用 graphqlHTTP
函数创建了一个 GraphQL 中间件,并将其添加到了 /graphql
路由上。在 context
函数中,我们连接到了数据库,并将其作为上下文对象传递给了 GraphQL Resolvers。最后,我们使用 app.listen
函数启动了 HTTP 服务器,并监听了 8000
端口。
总结
在本文中,我们介绍了如何使用 Deno 构建 GraphQL API,从底层到高端,包括如何设计和实现 GraphQL Schema、如何构建 GraphQL Resolvers 和如何使用 Deno 中的第三方库来提高开发效率。GraphQL 是一个强大的 API 查询语言,它可以帮助我们避免传统 REST API 中存在的问题,并提高开发效率。Deno 是一个新兴的 JavaScript 和 TypeScript 运行时,它具有快速、安全和轻量级的特点,并且不需要使用 npm 包管理器。我们相信,在未来,Deno 和 GraphQL 将成为构建现代 Web 应用程序的重要工具。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/660d2a56d10417a222d8f74e