gRPC 可很多人能知道,是 Google 出的一套开源 RPC 框架,一般会用这个来作为微服务之间的通信,那么 tRPC 是啥呢。
官网介绍是这么介绍的
boost productivity for your full-stack application
它是一个类似 gRPC 的东西,但是它不需要生成 proto 文件,可以自动进行类型推导,从而省去了定义ViewModel
的时间。
另外,它是基于 React Query 进行了封装,使用起来也很简单
// server.ts
const appRouter = router({
greeting: publicProcedure
.input(z.object({ string().nullish() }).nullish())
.query(({input}) => {
return {
text: `hello ${input?.name ?? 'world'}`,
date: new Date()
};
}),
getUserInfo: publicProcedure
.query(() => {
return {
name: "Tom"
}
})
});
// client.ts
const greeting = trpc.
greeting.
useQuery({ name: 'tRPC user' });
const userInfo = trpc.getUserInfo.useQuery();
return <div>{greeting.data?.text} {greeting.data?.date}</div>;
简单体验了一把,对于写一些小 Web 程序真的很方便,只要定义一次接口就行,不用客户端专门再写一个 service 文件去封装调用接口,即有 GRPC 的类型优势,又省了管理 proto 的烦恼。
它对于 Next.js 和 Express 也有比较好的支持度,所以如果是类似博客管理或者一些小型后台服务完全能够满足快速出活的需求
之前写 Go 微服务的时候,先定义好 proto 文件,然后生成一堆 pb 和 go 文件,再去更新文件的引用和实现代码关联起来,然后引用方再更新生成的文件,然后还要转成ViewModel
去返回给前端,总之很是复杂。