试用了下 trpc,发现限制挺多的

2023-02-19 17:05:44 +08:00
 fescover
最近社区很多人推荐 trpc
遂结合 nextjs 做了 demo 试了一下
有这么几个问题
1. 必须使用 ts? 目前生产环境的服务端主流还是 java,py,go
2. 只能用在前后端结合的单仓库中?没有办法把 server 单独分离仓库出来
3. 比如账户,支付,内容,IM 的多个分布式服务怎么办?不可能都集成到一个 server 里
4. 如果 server 要提供通用的多平台 api 怎么办,安卓和 ios 开发用不了 trpc 接口
5. 如何生成 api 文档?光有 ts 定义是不够的,看 api 文档更直观
6. 调第三方接口怎么办? 客户端还是得安装 http 请求库,会有多个请求方式共存
2135 次点击
所在节点    问与答
5 条回复
releaseme
2023-02-20 10:30:06 +08:00
我觉得 trpc 的定位就是解决 node + ts 全栈开发的痛点。有 1 2 的场景基本可以不用考虑
wateryessence
2023-02-20 21:12:14 +08:00
pjxxcc
2023-05-28 01:52:55 +08:00
同正在学 trpc ,我看的是 t3 stack ,官网有介绍 trpc 接口如何支持 open api ,允许其他客户端 /postman 等工具访问接口。
官网文档提供了两种方案,[how-do-i-call-my-api-externally]( https://create.t3.gg/en/usage/trpc#how-do-i-call-my-api-externally),推荐用第二种,写出来的接口既支持 trpc 调用也支持 restful 调用
pjxxcc
2023-05-28 01:54:37 +08:00
我是卡在 trpc 入参声明上了,看文档只支持字符串、数字等基础类型,对于入参有多层嵌套的 object 我一直没找到解决方案,只能扛着 eslint 报错直接跑
h4avone
2023-07-15 04:59:27 +08:00
我来尝试回答下,哈哈

1. 必须使用 ts? 目前生产环境的服务端主流还是 java,py,go

JavaScript/TypeScript 前后端都可以用,利用这个特性做的前后端类型共享,再利用下。

当然 java/py/go 也可以做到这点,但是需要遵循 openapi 规范做。

2. 只能用在前后端结合的单仓库中?没有办法把 server 单独分离仓库出来

有办法的,可以把 server 单独放一个仓库,再把 server 类型通过 tsc 单独导出一个 npm 包,只含 ts 类型给 client 端用。

3. 比如账户,支付,内容,IM 的多个分布式服务怎么办?不可能都集成到一个 server 里

同上。

4. 如果 server 要提供通用的多平台 api 怎么办,安卓和 ios 开发用不了 trpc 接口
这个也是可以的,trpc 可以导出 openapi 规范的文档(至于怎么导出,可以搜下对应关键词 trpc openapi);有了 openapi 规范,再找个安卓和 iOS 的 openapi 库,包一包就好啦!

5. 如何生成 api 文档?光有 ts 定义是不够的,看 api 文档更直观
同上,可以生成 openapi 文档;或者写好注释,导出 ts 注释文档,写的时候都有类型提醒,非常方便。

6. 调第三方接口怎么办? 客户端还是得安装 http 请求库,会有多个请求方式共存
这个问题,其他的方式也会存在的,和 trpc 没关系,http 请求库看看 trpc/client 默认用的哪一个。前端都用 fetch ,再安装一个 axios 其实也没多大。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/917389

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX