GraphQL 是一种新兴的 API 查询语言,它可以让前端开发人员更加灵活地请求数据。Deno 是一个新兴的 JavaScript 运行时环境,它提供了一种新的方式来开发服务器端应用程序。在本文中,我们将介绍如何在 Deno 中使用 GraphQL 进行 API 开发。
安装 Deno
首先,我们需要在本地安装 Deno 运行时环境。可以通过以下命令在 macOS 或 Linux 上安装 Deno:
$ curl -fsSL https://deno.land/x/install/install.sh | sh
或者在 Windows 上使用 PowerShell:
$ iwr https://deno.land/x/install/install.ps1 -useb | iex
安装完成后,可以通过运行以下命令来验证 Deno 是否已正确安装:
$ deno --version
安装依赖
在开始编写代码之前,我们需要安装两个依赖项:dmmf
和 deno-graphql
. dmmf
是 Prisma 生成的数据模型元数据,deno-graphql
是 Deno 中使用的 GraphQL 库。
$ deno install -A -f https://deno.land/x/dmmf/cli.ts $ deno install -A -f https://deno.land/x/oak/mod.ts $ deno install -A -f https://deno.land/x/deno_graphql/mod.ts
创建数据模型
我们将使用 Prisma 来创建数据模型。在本例中,我们将使用一个简单的数据模型,其中包含一个 User
类型,该类型具有 id
和 name
字段。
-- -------------------- ---- ------- ---------- -- - -------- - -------- --- - ------------- - --------- ------ - -------- - ------------------ - ----- ---- - -- --- --- ------------------------- ---- ------ -
我们可以使用以下命令生成数据模型元数据:
$ npx prisma generate
这将在 node_modules/.prisma/client
中生成一个名为 index.d.ts
的文件,其中包含了我们刚刚创建的数据模型。
创建 GraphQL Schema
接下来,我们需要创建一个 GraphQL Schema,该 Schema 描述了我们的 API。我们将使用 type-graphql
库来定义我们的 Schema。
首先,我们需要安装依赖项:
$ deno install -A -f https://deno.land/x/typegraphql/install.ts
然后,我们可以创建一个 UserResolver
类,该类定义了我们的 User
类型的 GraphQL Resolver。
-- -------------------- ---- ------- ------ - --------- ----- - ---- --------------- ------ - ------------ - ---- ----------------- ----------- ------ ----- ------------ - --------- -- ------- ----- ------- - ----- ------ - --- --------------- ------ ----------------------- - -
在上面的代码中,我们首先导入了 Resolver
和 Query
装饰器。然后,我们定义了一个 UserResolver
类,并在该类中定义了一个名为 users
的方法,该方法返回一个 Promise
,该 Promise
解析为 User
类型的数组。
在 users
方法中,我们创建了一个新的 PrismaClient
实例,并使用 findMany
方法查询了所有用户。最后,我们将查询结果返回给 GraphQL。
接下来,我们需要创建一个 schema.ts
文件,该文件定义了我们的 GraphQL Schema。
import { buildSchema } from "type-graphql"; import { UserResolver } from "./resolvers/user"; export const createSchema = async () => { return await buildSchema({ resolvers: [UserResolver], }); };
在上面的代码中,我们首先导入了 buildSchema
函数和 UserResolver
。然后,我们定义了一个名为 createSchema
的函数,该函数返回一个 Promise
,该 Promise
解析为我们的 GraphQL Schema。
在 createSchema
函数中,我们调用了 buildSchema
函数,并将 UserResolver
添加到 resolvers
数组中。最后,我们将返回 buildSchema
函数的结果。
创建服务器
现在我们可以创建我们的服务器了。我们将使用 oak
库来创建我们的服务器。
首先,我们需要安装依赖项:
$ deno install -A -f https://deno.land/x/oak/mod.ts
然后,我们可以创建一个 server.ts
文件,该文件定义了我们的服务器。
-- -------------------- ---- ------- ------ - ----------- - ---- --------------------------------- ------ - -------------------- - ---- ------------------------------------------ ------ - ------------ - ---- -------------- ----- --- - --- -------------- ----- ------ - ----- --------------- ------------------------------ ------- ------ ---- ---- ------------------- ------- -- ------------------------ ----- ------------ ----- ---- ---
在上面的代码中,我们首先导入了 Application
类、createGraphQLHandler
函数和 createSchema
函数。然后,我们创建了一个新的 Application
实例,并调用了 createSchema
函数来获取我们的 GraphQL Schema。
接下来,我们使用 createGraphQLHandler
函数将我们的 Schema 添加到我们的应用程序中。最后,我们调用 listen
方法来启动我们的服务器。
测试 API
现在我们可以测试我们的 API 了。我们可以使用 curl
命令或任何其他 HTTP 客户端来测试我们的 API。
$ curl -X POST -H "Content-Type: application/json" \ --data '{ "query": "{ users { id, name } }" }' \ http://localhost:4000/graphql
上面的命令将向我们的服务器发送一个 GraphQL 查询,并返回所有用户的 id
和 name
字段。
结论
在本文中,我们介绍了如何在 Deno 中使用 GraphQL 进行 API 开发。我们首先安装了 Deno 运行时环境和依赖项,然后创建了一个简单的数据模型和 GraphQL Schema,最后使用 oak
库创建了我们的服务器。通过本文,您应该能够了解如何在 Deno 中使用 GraphQL 进行 API 开发,并开始构建您自己的应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6758eab23bfce614ea7c5ac0