使用 tRPC 和 Deno 构建类型安全 API:恐龙数据示例
在本教程中,我们将学习如何使用 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 的几个关键特性:
- 类型推断:客户端通过
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
最新文章
- 如何使用 PostgREST 和 Apache APISIX 构建高效、安全的 RESTful API 解决方案
- 什么是SQL注入?理解、风险与防范技巧
- Excel中,创建一个公式来调用ChatGPT API并返回结果
- 告别Mock服务: 用Chrome DevTools模拟API数据
- 如何获取DeepL API Key 密钥(分步指南)
- Google AI实验背后的API技术:Doodle交互玩法拆解
- 5分钟掌握高德地图API如何调用
- Claude 代码生成被限流?免费与付费替代工具全面对比
- Envoy Gateway 的 Gateway API 扩展功能介绍 – Tetrate
- 使用Django REST Framework构建API——第二部分
- 鸿蒙应用实践:利用扣子API开发起床文案生成器
- 如何获取OpenRouter API Key 密钥(分步指南)