前言
GraphQL 是一种数据交互语言,由 Facebook 开发并开源,它可以让客户端指定需要的数据结构和具体数据。GraphQL 的优势在于可以按需获取数据,避免了传统接口的二次开发和数据过多传输等问题。本文将介绍如何在 Deno 中使用 GraphQL 进行数据交互。
安装
安装 Deno 和 graphql 客户端
$ curl -fsSL https://deno.land/x/install/install.sh | sh $ deno install --unstable --allow-net gql https://deno.land/x/[email protected]/mod.ts
创建服务器
我们使用 Oak 创建一个简单的服务器,同时借助 Oak GraphQL 中间件来处理 GraphQL 的请求。
-- -------------------- ---- ------- ------ - ----------- - ---- --------------------------------- ------ - ------------ - ---- ----------------------------------------- ------ - -------- - ---- -------------- ------ - --------- - ---- ----------------- ----- --- - --- -------------- ----- -------------- - ----- -------------- --------- ---------- --- -------------------------------- --------------------------------- ------------------- ----- -- ------------------------ ----- ------------ ----- ---- ---
其中,typeDefs
和 resolvers
分别用于声明 GraphQL 的类型和数据处理方法。
创建 Schema
-- -------------------- ---- ------- ------ - --- - ---- ----------------------------------------- ------ ----- -------- - ---- ---- ---- - --- --- ------ ------- ------- ------- - ---- ----- - --------- ------- - ----- --------- - ------ ------- ------- ------- - ---- -------- - ------------- ------------ ---- - --
这里我们定义了一个 Book
类型,包括图书 id
、标题 title
和作者 author
。同时,Query
定义了获取图书列表的方法 getBooks
,Mutation
定义了增加图书的方法 addBook
,入参为 BookInput
。
创建 Resolver
-- -------------------- ---- ------- ------ ----------- ---- ------------ --------- --------- - ------ ------- ------- ------- - --------- ----- ---------- ------------- ------------- - ----- --------- - --- ------------ ------ ----- --------- - - ------ - --------- --- ------ -- - ------ --------------------- -- -- --------- - -------- --- ---- ------- ------ ------------ --------- -- - ------ ------------------------ - - -
每个 resolver
都对应一个 typeDef
中定义的 GraphQL 方法。在 resolver 中,我们把处理逻辑定义在这个函数中,它会被对应的类型调用。
这里我们使用一个 DataStore
作为数据源,定义了 getBooks
和 addBook
方法,用于获取图书列表和添加图书。
创建数据源
-- -------------------- ---- ------- --------- ----- ---------- ------------- ------------- - ------ ----- --------- - ------- ------ ------ - - - ----- ------ ------- ------- ----- ----- - -- ----------- ------ - ------ ----------- - ------------- ------------------------------ ---------- ----- -- - ----------------- - -- ----- ------- - - --- ------- -- ------------------------- ------ -------- - -
这里我们定义了一个 DataStore
类,它包含了图书数据和操作这些数据的方法,使用类的方式来管理和维护数据,使其更加灵活和易于扩展。
发起GraphQL请求
我们可以使用 gql
客户端发起 GraphQL 请求。
-- -------------------- ---- ------- ------ - --- - ---- --------------------------------- ----- ----- - ---- -------- - ------- ------ - ------ ---- ---- -- ------ ------- ------ -------- -- - -- ----- ------ - --- ----- -------- - ----- -------------------------------------- - ------- ------- -------- - --------------- ------------------- -- ----- ---------------- ------ ---------- ----- --- --- ----- ------ - ----- ---------------- ------------------------------------
这里我们使用 mutation
来调用 addBook
方法,入参是一本新的图书。我们通过 gql
发起请求,并使用 fetch
发出网络请求,最终将返回的结果打印到控制台。
总结
在本文中,我们介绍了如何在 Deno 中使用 GraphQL 进行数据交互,通过创建服务器和定义 Schema
、Resolver
和数据源等步骤,带您了解了 GraphQL 的基础知识,同时,使用 Deno 中的 GraphQL 客户端,我们发起了构建时 GraphQL 类型检查、客户端查询和变异等请求。GraphQL 能够高效地处理数据,解决了 API 数据传输成本高,无法满足不同客户端需求等问题。希望本文能给您带来帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e6c08ef6b2d6eab3219af9