在今天的前端开发中,GraphQL 已经成为了前端和后端通信的一种重要的方式。而 Deno,则成为了越来越多前端开发者探索的全新的 JavaScript/TypeScript 运行时环境。那么,在 Deno 中,如何使用 GraphQL 来构建 API 呢?本篇文章将详细介绍。
安装 Deno
首先需要在你的机器上安装 Deno,可以访问官网 deno.land,根据自己的操作系统下载安装即可。安装完成后,可以使用以下命令验证是否安装成功:
deno --version
如果正确安装,会输出 Deno 的版本号。
安装 oak 和 graphql
接下来,我们需要使用两个库:oak
和 graphql
。oak
是一个基于中间件的 Web 框架,可用于创建 API、中间件等等。而 graphql
则是关于 GraphQL 的 JavaScript 库。
运行以下命令安装两个库:
deno install --allow-net --allow-read https://deno.land/x/oak/mod.ts deno install --allow-net --allow-read https://deno.land/x/graphql/mod.ts
这里需要注意的是,我们需要在安装时加入 --allow-net
和 --allow-read
参数来开启网络和读取文件的权限。
创建 GraphQL Schema
在使用 GraphQL 构建 API 时,我们需要先定义一个 GraphQL Schema。Schema 通常包括两个部分,一部分是定义数据类型的 typeDefs
,另一部分是定义查询语句的 resolvers
。
创建一个名为 schema.ts
的文件,用于存放 Schema 的定义:
-- -------------------- ---- ------- ------ - ------------------ -------------- -------------- - ---- ------------------------------------- ----- -------- - --- ------------------- ----- ------- ------- -- -- -- ------ - ----- ------------- -- ----- - ----- ------------- -- ------- - ----- ------------- -- --- --- ----- -------- - --- ------------------- ----- ------- ------- -- -- -- --- - ----- ------------- -- ----- - ----- -------- -- ------ - ----- ------------- -- --- --- ----- ------ - --- --------------- ------ --- ------------------- ----- -------- ------- - ----- - ----- --------- ----- - --- - ----- ------------- - -- -------- --- - -- -- -- - ------ - --- ----- - ------ ------- ----- ----- -- ------ ----------------------- -- -- -- -- --- --- ------ - ------ --
其中,我们定义了两个对象类型(NameType
和 UserType
),以及一个 Schema。Schema 中定义了一个查询语句,查询一个用户,根据用户 ID 返回用户的信息。
创建服务
有了 Schema,我们接下来需要创建一个服务器,可用于处理 HTTP 请求。这里,我们使用 oak
中间件来搭建 HTTP 服务器:
-- -------------------- ---- ------- ------ - ----------- - ---- --------------------------------- ------ - ------------- --- - ---- ------------------------------------- ------ - ------ - ---- -------------- ----- --- - --- -------------- ----- ----- - ---- ---------------------- -- ------------- ----- ----- -- - ----- ------- ----- -- - -------------------------------------------- ---------------------------------- --------------------------- - -------- --- ------------- ----- ----- -- - ----- ----- - ----------- ----- ------- ----- -- - ---------- - ------ ------------------------------------------- ----------- --- ------------- ----- ----- -- - ----- - ---- - - ----- -------------- ------- ------- -------- --- ---------- ---------------------- --------- ------ -------------- - ------------------------ ----- -- ------------------------------ ---------------------------------------- -------------------- ----------------- - -------------------- ----- --- --- ------------------- ------- -- ------------------------ ----- ------------ ----- ---- ---
这里,我们创建了一个 Applicaion
(也可以使用 Router
,更加灵活),并分别使用了三个中间件:
- 日志记录,记录请求路径和响应时间;
- 计算响应时间,并设置响应头的
X-Response-Time
; - 处理 GraphQL 查询,使用
applyGraphQL
函数。
其中,applyGraphQL
函数使用了 schema
和 typeDefs
,并传入了 parsedOptions
参数,用于禁止 Null 值的查询。这样,我们即可在 http://localhost:8000
上启动服务。
测试
最后,我们来测试一下服务。在浏览器或任意 GraphQL 工具中,访问 http://localhost:8000/graphql
,使用以下查询语句:
-- -------------------- ---- ------- ----- - -------- ---- - -- ---- - ----- ---- - ----- - -
如果一切正常,你应该能够得到以下的响应:
-- -------------------- ---- ------- - ------- - ------- - ----- ---- ------- - -------- ------- ------- ----- -- -------- ---------------------- - - -
总结
本篇文章介绍了在 Deno 中使用 GraphQL 来构建 API,并且详细展示了如何创建 Schema 和 HTTP 服务器,以及进行测试。期望这篇文章对你理解如何使用 Deno 和 GraphQL 的场景有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6450c77d980a9b385b9b1bac