前言
GraphQL 是一种用于 API 的查询语言,由 Facebook 开发。GraphQL 旨在提高 API 的效率、强制前后端协作、减少不必要的网络传输等。而 Deno 是最近出现的一种全新的运行时环境,拥有更高的安全性、更先进的 JavaScript/TypeScript 支持、更快的启动速度和更简洁的体系结构等众多优点。在本文中,我们将探讨如何在 Deno 中使用 GraphQL 进行数据修改。
准备工作
在本文中,我们将使用一个简单的例子进行讲解,因此我们需要安装一些必要的工具来运行和测试这个例子。我们需要安装 Deno 和两个 Deno 模块,分别是 deno-graphql
和 oak
,我们可以用以下命令来安装这些模块:
deno install -Af --unstable https://deno.land/x/deno-graphql/mod.ts deno install --allow-net --allow-read --allow-env --unstable https://deno.land/x/oak/mod.ts
在安装完成后,我们创建一个 server.ts
文件,这个文件是我们的 GraphQL 服务器文件。
-- -------------------- ---- ------- ------ - ------------ ------ - ---- --------------------------------- ------ - ------------ - ---- ------------------------------------------ ----- --- - --- -------------- ----- ----- - - ---- ---- - --- --- ----- ------- - ----- --------- - ----- ------- - ---- ----- - ----------- ----- ----- - ---- -------- - ----------------- ------------ ----- -------------- ---- ------ ------------ ----- -------------- ----- ----- - -- ----- --------- - - ------ - -------- --- ---- - -- -- ---- -- - ------ - --- ----- ------- -- -- -- --------- - ----------- --- ---- - ----- -- ---- -- - ------ - --- ---- -------- -- -- ----------- --- ---- - --- ----- -- ---- -- - ------ - --- -------- -- -- ----------- --- ---- - -- -- ---- -- - ------ - -- -- -- -- -- ----- -------------- - ----- -------------- --------- ------ ---------- --- ----- ------ - --- --------- ----------------------- ---------------- ------------------------- --------------------------------- ----- ------------ ----- ---- ---
在这个文件中,我们定义了一个包含 User
类型和 Query
、Mutation
两个操作的 GraphQL Schema。在 resolvers
中,我们实现了 getUser
、createUser
、updateUser
、deleteUser
四个操作的具体逻辑。在 GraphQLService
中,我们利用 deno-graphql
模块将 types
和 resolvers
聚合成一个完整的 GraphQL 服务。
最后,我们使用 oak
模块创建了一个 HTTP 服务器来监听端口 8000
上的请求。
编写前端代码
在本例中,我们将使用 axios
来向 GraphQL 服务器发送请求,因此我们需要先安装 axios
,命令如下:
npm install axios
在安装完成后,我们编写一个 client.ts
文件,先定义一些必要的类型和常量:
-- -------------------- ---- ------- ------ ----- ---- -------- --------- ---- - --- ------- ----- ------- - --------- --------- - ----- ------- - --------- --------------- - ------ ---------- - --------- --------------- - --- ------- ------ ---------- - --------- --------------- - --- ------- - ----- ----------- - --------------------------------
在这里,我们定义了 User
、UserInput
、CreateUserInput
、UpdateUserInput
、DeleteUserInput
等类型,它们与 GraphQL Schema 中定义的类型是一致的。我们还定义了一个常量 GRAPHQL_URL
,这是我们的 GraphQL 服务器地址。
接下来,我们可以写出用于向 GraphQL 服务器发送请求的代码:
-- -------------------- ---- ------- ----- -------- ------------------- ------- ----------- ---- - --- - ----- -------- - ----- ----------------------- - ------ ---------- --- ------ ------------------- - ----- ------- - --------------------- ------ ----- - - ----- -------- ----------------- ----------- ------------ - ----- - ----- ---- - ----- ------------- - -------- -------- ----------- - ----------------- ------- - -- ---- - - -- - ----- - -- -- ------ - ------ ---------------- - ------ ----- - ----- -------- ----------- --- ------- ------ --------- -- ------------ - ----- - ----- ---- - ----- ------------- - -------- ----- ---- ------- ----------- - -------------- ---- ------ ------- - -- ---- - - -- - --- ----- - -- -- ------ - ------ ---------------- - ------ ----- - ----- -------- -------------- -------- ------------ - ----- - ----- ---- - ----- ------------- - -------- ----- ---- - -------------- ---- - -- ---- - - -- - -- - -- -- ------ - ------ ---------------- - ------ ----- - ----- -------- ----------- -------- ------------ - ----- - ----- ---- - ----- ------------- - ----- ----- ---- - ----------- ---- - -- ---- - - -- - -- - -- -- ------ - ------ ------------- - ------ ----- -
在这里,我们定义了一个 queryGraphQL
函数和 createUser
、updateUser
、deleteUser
、getUser
四个函数,分别对应 GraphQL Schema 中定义的四个操作。在 queryGraphQL
函数中,我们使用 axios
向 GraphQL 服务器发送请求,并将返回的数据进行解析。
在 createUser
、updateUser
、deleteUser
、getUser
四个函数中,我们利用 queryGraphQL
函数发送 GraphQL 请求,并解析返回的数据,得到我们需要的 User
类型数据。
测试
我们可以执行以下命令在本地启动服务器:
deno run --allow-net server.ts
在另一个命令行窗口中,我们执行以下命令在测试客户端:
deno run --allow-net --allow-read client.ts
注意,我们在 client.ts
文件中使用了 axios
,这意味着我们需要通过 allow-net
、allow-read
授权来使用网络和文件 I/O。当命令执行成功时,我们应该可以看到如下输出:
Created user: { id: '1', name: 'Alice' } Updated user: { id: '1', name: 'Bob' } Deleted user: { id: '1', name: 'Bob' } Get user: { id: '1', name: 'Alice' }
这些输出表明我们的 GraphQL 示例运行成功,并且已经可以实现基本的数据查询、创建、更新、删除操作。
结论
在本文中,我们通过一个简单的示例演示了如何在 Deno 中使用 GraphQL 进行数据修改。我们利用 deno-graphql
和 oak
库来实现了一个 GraphQL 服务器,并利用 axios
向这个服务器发送 GraphQL 请求。通过这个例子,我们了解了 GraphQL 的基本用法,也学会了如何在 Deno 中使用这个技术。希望这篇文章可以对查询 GraphQL 的读者有所帮助!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6721d0922e7021665e08dcac