前言
GraphQL 是一种用于 API 的查询语言,它与传统的 REST API 相比有很多的优势。Deno 是一个新的 JavaScript 运行环境,与 Node.js 相比具有更好的安全性和更好的模块化和包管理系统。在本文中,我们将介绍如何使用 Deno 来实现 GraphQL 接口。
安装 Deno
要使用 Deno,我们需要先安装它。在 Windows 和 macOS 上,我们可以使用 Shell 或 PowerShell 来运行以下命令:
curl -fsSL https://deno.land/x/install/install.sh | sh
或
iwr https://deno.land/x/install/install.ps1 -useb | iex
在 Linux 上,我们使用以下命令:
curl -fsSL https://deno.land/x/install/install.sh | sudo DENO_INSTALL=/usr/local sh
安装完成后,我们可以在终端中输入 deno
来测试 Deno 是否安装成功。
了解 GraphQL
在我们开始实现 GraphQL 接口之前,我们需要了解一些 GraphQL 的基础知识。GraphQL 是一种用于 API 的查询语言,它不同于传统的 REST API。在 GraphQL 中,客户端可以通过发送查询语句来获取它所需要的数据,而不是从服务器上获取所有的数据并在客户端上进行筛选和整理。
例如,下面是一个 GraphQL 查询语句:
query { user(id: 1) { name email } }
这个查询语句表明客户端需要获取 id 为 1 的用户的姓名和邮箱。
安装依赖
在我们开始编写代码之前,我们需要安装一些必要的依赖项。我们使用 deno.graphql
作为 GraphQL 的库,使用 deno_mysql
作为 MySQL 的库,使用 oak
作为我们的 HTTP 服务器。我们可以通过以下命令来安装这些依赖项:
deno install --allow-net --allow-read https://deno.land/x/ysql/mod.ts deno install --allow-net --allow-read --allow-plugin --unstable https://deno.land/x/deno_mysql/mod.ts deno install --allow-net --allow-read --allow-plugin --unstable https://deno.land/x/graphql/mod.ts deno install --allow-net --allow-read --allow-plugin --unstable https://deno.land/x/oak/mod.ts
编写代码
首先,我们需要初始化我们的 Oak 应用程序。我们可以使用以下代码来创建我们的应用程序:
import { Application } from "https://deno.land/x/oak/mod.ts"; const app = new Application();
接下来,我们需要定义我们的 GraphQL 中的类型和解析器。在本例中,我们将从 MySQL 数据库中获取用户的数据。我们可以使用以下代码定义我们的 GraphQL 类型和解析器:
-- -------------------- ---- ------- ------ - --- - ---- ------------------------------------- ------ - ------ - ---- ----------------------------------- ----- -------- - ---- ---- ---- - --- -- ----- ------ ------ ------ - ---- ----- - -------- ----- ---- - -- ----- --------- - - ------ - ----- ----- --- ---- - -- -- - --- ------ -- -- - ----- ------ - ----- --- ------------------ --------- ------------ --------- ------- --- ------- ---- - -------- ------ -- --- ----- -------- - ----- --------------- ------- - ---- ----- ----- -- - --- ----- -- ------ - --- ----------- ----- ------------- ------ -------------- -- -- -- --
在代码中,我们使用 gql
函数来定义 GraphQL 的类型和解析器。我们定义了一个 User
类型和一个 Query
类型,Query
类型包含了一个 user
查询字段,该查询字段需要一个 id
参数,并返回一个 User
类型。
在解析器中,我们连接到 MySQL 数据库,并执行一个查询,然后将结果转换为我们需要的 User
类型。请注意,我们在查询中使用了参数绑定,以防止 SQL 注入攻击。
最后,我们将类型和解析器传递给 makeExecutableSchema
函数,以生成一个可执行的 GraphQL 模式。
import { makeExecutableSchema } from "https://deno.land/x/graphql/mod.ts"; const schema = makeExecutableSchema({ typeDefs, resolvers, });
现在我们已经定义了我们的 GraphQL 类型和解析器,我们需要将它们添加到我们的 Oak 应用程序中,以便我们可以通过 HTTP 访问它们。我们可以使用以下代码将 GraphQL 添加到我们的应用程序中:
-- -------------------- ---- ------- ------ - ------------ - ---- ------------------------------------- ------ - --- - ---- ------------------------------------- ------ - ------ - ---- --------------------------------- ----- ------ - --- --------- ------------ ----------- -------------- ------- --- -- ------------------------- ---------------------------------
在代码中,我们将 applyGraphQL
函数添加到我们的路由器中,并将其绑定到 "/graphql"
路径上。我们在 applyGraphQL
函数中传递了一个包含 schema
的选项对象,这将使它使用我们定义的 GraphQL 模式作为我们的查询处理程序。
运行代码
现在我们已经写完了我们的 Deno GraphQL 应用程序,我们可以通过以下命令来运行它:
deno run --allow-net --allow-read server.ts
现在我们已经成功地使用 Deno 来实现了一个 GraphQL 接口!我们可以使用以下命令来测试我们的 GraphQL API:
curl -X POST http://localhost:8000/graphql \ -H "Content-Type: application/json" \ -d '{"query":"query { user(id: 1) { name email } }"}'
总结
在本文中,我们了解了如何使用 Deno 来实现 GraphQL 接口。我们安装了必要的依赖项,了解了 GraphQL 的基本知识,并编写了一个使用 MySQL 的 GraphQL 解析器。我们还初始化了一个 Oak 应用程序,并将 GraphQL 添加到应用程序中。最后,我们运行了我们的代码并测试了我们的 GraphQL API。这个例子仅仅是一个开始,你可以通过自己的想象力和创造力来实现更多有趣的功能。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64cf7f1fb5eee0b5256c538a