使用 tRPC 和 Deno 构建类型安全 API:恐龙数据示例

作者:API传播员 · 2025-10-16 · 阅读时间:4分钟

在本教程中,我们将学习如何使用 tRPC 和 Deno 构建一个简单的类型安全 API 开发


设置 tRPC

要在 Deno 中开始使用 tRPC,我们需要安装必要的依赖项。由于 Deno 支持 npm 包的兼容性,我们可以直接使用 tRPC 的 npm 版本以及 Zod 进行输入验证。运行以下命令安装依赖项:

deno install npm:@trpc/server@next npm:@trpc/client@next npm:zod jsr:@std/path

设置 tRPC 服务器

构建 tRPC 应用程序的第一步是设置服务器。我们需要初始化 tRPC,并创建基础路由器和过程构建器,这些将作为定义 API 端点的核心。

初始化 tRPC

创建一个名为 server/trpc.ts 的文件,初始化 tRPC 并导出用于定义 API 端点的路由器和过程生成器。以下是示例代码:

// 示例代码省略

在这里,我们使用了 publicProcedure 来创建无需身份验证的端点。

创建数据层

接下来,我们需要一个简单的数据层来管理恐龙数据。创建一个名为 server/db.ts 的文件,内容如下:

// 示例代码省略

这个基于文件的数据库可以将恐龙数据读写到 JSON 文件中。虽然在生产环境中通常会使用更复杂的数据库,但对于演示来说,这种方式已经足够。

提供实际数据

创建一个名为 data.json 的文件,其中存储一些恐龙的样本数据,例如:

[
  {
    "name": "Tyrannosaurus Rex",
    "description": "A large carnivorous dinosaur."
  }
]

定义主服务器文件

最后,创建一个 server/index.ts 文件,用于定义 tRPC 路由器和程序。以下是示例代码:

// 示例代码省略

在这个文件中,我们设置了三个主要端点,例如 dino.list,用于返回所有恐龙数据。服务器将监听 3000 端口,并处理所有 tRPC 请求。


设置 tRPC 客户端

在服务器配置完成后,我们可以创建一个客户端来使用 API,并确保类型安全。

创建客户端文件

创建一个名为 client/index.ts 的文件,内容如下:

// 示例代码省略

此客户端代码展示了 tRPC 的几个关键特性:

  1. 类型推断:客户端通过 AppRouter 类型自动继承服务器的所有类型定义。这意味着所有 API 调用都具有完整的类型支持和编译时类型检查。

启动服务器和客户端

deno.json 配置文件中添加以下任务配置:

{
  "tasks": {
    "start": "deno -A server/index.ts",
    "client": "deno -A client/index.ts"
  }
}

运行以下命令启动服务器:

deno task start

然后运行客户端:

deno task client

运行后,您将看到客户端如何与数据库交互并返回数据。


验证类型安全

为了验证 tRPC 的类型安全性,我们可以尝试传递错误的参数类型。例如,在 client/index.ts 中,将 description 字段的值从字符串更改为数字:

const createdDino = await trpc.dino.create.mutate({
  name: "Denosaur",
  description: 12345, // 错误的类型
});

重新运行客户端时,tRPC 将抛出 invalid_type 错误,因为它期望的是字符串而不是数字。这证明了 tRPC 的类型安全性。


总结

通过本教程,您已经学习了如何使用 tRPC 和 Deno 构建一个类型安全的 API。我们从安装依赖项开始,逐步完成了服务器和客户端的配置,并验证了 tRPC 的类型推断功能。接下来,您可以尝试扩展 API 功能,例如添加更多端点或集成更复杂的数据库。

原文链接: https://deno.com/blog/build-typesafe-apis-trpc