tRPC 是一种高性能的远程过程调用(RPC)框架,专为多语言开发和 TypeScript 全栈项目设计。它提供了简单、类型安全、高性能的特点,适用于分布式应用、微服务架构和全栈 TypeScript 项目。
tRPC 的主要特点
- 类型安全:利用 TypeScript 提供编译时和运行时的类型安全,确保前后端类型一致。
- 高性能:适用于互联网海量访问场景,支持流式 RPC。
- 插件化:提供强大的可扩展性,支持多种通信协议和微服务治理平台。
- 跨语言支持:基于 Protocol Buffers,支持跨语言的服务通信。
使用场景
- 分布式应用开发:适合跨语言通信的分布式应用。
- 微服务架构:快速构建微服务体系,支持多种微服务治理平台。
- 全栈 TypeScript 项目:提供端对端类型安全的 API,适合 Next、Nuxt 等框架。
- 流式 RPC 应用:适用于大文件上传/下载、消息 Push 等场景。
代码示例
服务端示例
import { initTRPC } from '@trpc/server';
import { z } from 'zod';
const t = initTRPC.create();
export const router = t.router;
export const publicProcedure = t.procedure;
export const appRouter = router({
userList: publicProcedure
.output(
z.array(z.object({
id: z.number(),
name: z.string(),
age: z.number(),
})),
)
.query(async () => {
return [{ id: 1, name: "Tom", age: 21 }];
}),
});
// 使用 Express 或其他框架启动服务
import { createHTTPServer } from '@trpc/server/adapters/standalone';
import cors from 'cors';
const server = createHTTPServer({
middleware: cors(),
router: appRouter,
});
server.listen(3000, () => {
console.log("server running on 127.0.0.1:3000");
});
客户端示例
import { createTRPCClient, httpLink } from '@trpc/client';
import type { AppRouter } from '../server/router';
const trpc = createTRPCClient<AppRouter>({
links: [
httpLink({
url: 'http://localhost:3000',
}),
],
});
// 发送请求
const list = await trpc.userList.query();
console.log(list);
总结
tRPC 是一种高性能、类型安全的 RPC 框架,适用于多种开发场景。它提供了强大的可扩展性和跨语言支持,特别适合 TypeScript 全栈项目和分布式应用开发。通过使用 tRPC,可以简化客户端与服务端之间的通信,提高开发效率和代码质量。