什么是tRPC?为什么要用它,用它有啥好处?

27 阅读2分钟

tRPC 是一种高性能的远程过程调用(RPC)框架,专为多语言开发和 TypeScript 全栈项目设计。它提供了简单、类型安全、高性能的特点,适用于分布式应用、微服务架构和全栈 TypeScript 项目。

tRPC 的主要特点

  1. 类型安全:利用 TypeScript 提供编译时和运行时的类型安全,确保前后端类型一致。
  2. 高性能:适用于互联网海量访问场景,支持流式 RPC。
  3. 插件化:提供强大的可扩展性,支持多种通信协议和微服务治理平台。
  4. 跨语言支持:基于 Protocol Buffers,支持跨语言的服务通信。

使用场景

  1. 分布式应用开发:适合跨语言通信的分布式应用。
  2. 微服务架构:快速构建微服务体系,支持多种微服务治理平台。
  3. 全栈 TypeScript 项目:提供端对端类型安全的 API,适合 Next、Nuxt 等框架。
  4. 流式 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,可以简化客户端与服务端之间的通信,提高开发效率和代码质量。