实现后端微服务架构中 TS 与 Python 服务之间的通信,希望能通过维护同一套类型定义/ Schema 保证 single source of truth ,提高接口可维护性。
grpc/grpc-node
,但对 JS 生态的支持看上去不是特别理想在 TS 项目中,想按照官方文档里的例子那样使用 @grpc/grpc-js
的话,需要自动生成类型定义。找了一圈,发现只有 @grpc/proto-loader
自带的 proto-loader-gen-types
生成的还算可用,然而还是有坑,比如引入路径中没有文件扩展名,而在 TS 中使用 ESM + module": "node16"
时文件扩展名是强制的,所以还是需要手动修改生成的代码。另外有个 @bufbuild/protobuf
,号称是唯一一个全部通过 Protobuf 兼容性测试的,结果生成的东西 @grpc/grpc-js
压根用不了,只能用他们的配套库 @connectrpc/connect
,说是兼容 gRPC ,也只是客户端部分可以发起 gRPC 而已
用 protoc
生成的 Python 代码也有引入路径问题,如果文件不在根目录下,就会报错找不到模块,于是你还是需要手动修改自动生成的代码
官方文档太差了,没有更多用例来解释真实场景里是什么样的,比如服务端的部分:
server.add_insecure_port("[::]:" + PORT)
server.bindAsync(
`0.0.0.0:${PORT}`,
gRPC.ServerCredentials.createInsecure(),
(err, port) => {},
);
这都 insecure 了,那生产环境中想 secure 该怎么办?
上面的问题 GitHub 也有相关 Issue 讨论,但到目前为止似乎都不了了之了。想问一下有相关经验的佬们:
@grpc/grpc-js
/grpcio
之外,还有其他基于 gRPC 的更好用的框架吗?这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.