AI 的回答不能让我信服. 它总是在强调, 大项目 vs 小项目, 以及灵活性等等.
我想知道它存在的真正的, 实际的意义是什么? 或者说,我为什么要为一个 api 提供两种协议?
在譬如, 为了给浏览器使用? 为什么不单独写一个 BFF 层. 本来 grpc 服务就是给内部使用的.
谢谢.
AI 的回答不能让我信服. 它总是在强调, 大项目 vs 小项目, 以及灵活性等等.
我想知道它存在的真正的, 实际的意义是什么? 或者说,我为什么要为一个 api 提供两种协议?
在譬如, 为了给浏览器使用? 为什么不单独写一个 BFF 层. 本来 grpc 服务就是给内部使用的.
谢谢.
1
SethShi Aug 10, 2025 一套代码两套运行机制, 比如团队里对 GRPC 很熟悉, 并且基于此搭建了整套服务, (甚至可能客户端和服务端通信使用 rpc)
这时候三方想要和你们合作, 给你们 1kw, 让你们暴露 HTTP 接口分享资源给他们, 直接开发一套 HTTP 肯定麻烦, 直接用 grpc-gateway 包装一层, 写文档给他们用 |
2
chaleaochexist OP @seth19960929 你这个假设不太实际啊, 真给我 1kw 我绝逼单独开发一套...保准让客户满意.
|
3
SethShi Aug 10, 2025 @chaleaochexist 太真实存在了, 单独开发一套绝对不是这么简单的
1. 项目太复杂, 老项目已经运行了好几年 2. 时间太赶, 需求方要你下周提供 3. 1kw 给的不是你, 给的是公司, 你只需要提供最快的实现方式 |
4
mooyo Aug 10, 2025 @chaleaochexist 你再单独开发一套,是不是就同时维护了两份代码?有考虑过可维护性么?
而且,即使团队想全用 GRPC ,也不可避免地会遇到只能使用 HTTP 的场景,比如内网用 lua 调用接口 |
5
SethShi Aug 10, 2025 本质就是一套代码, 提供两种调用方式,
你所说的 BFF, 是指启一个 HTTP 服务, 然后内部连接 rpc, 代理一层? 那你为何这样做, grpc-gateway 就是这样的一个标准解决方案 |
6
chaleaochexist OP @seth19960929 代理一层 是因为 rpc 提供的服务是不考虑 客户端实际场景的, 是站在自己人内部调用的角度.
如果是考虑外部调用的话, 我就不会用 grpc 了. 不知道我表达的是否清晰. |
7
chaleaochexist OP @seth19960929 或者说为什么会有人一开始用 grpc 开发一套系统给外部调用?
|
8
chaleaochexist OP @mooyo 有道理!!!
|
9
SethShi Aug 10, 2025 @chaleaochexist #6 你搜一下, 挺多物联网用的, 我认识的一个做儿童音箱的公司就在用
|
10
pingdog Aug 10, 2025 via Android
不用 gateway ,你让切图仔直接传 protobuf ?
|
11
AoEiuV020JP Aug 10, 2025 via Android
我也纠结,如果一开始就有支持 web 的需求,是不是不应该选择 grpc ,
如果不需要流式的话直接 jsonrpc 还简单方便, 有什么方案支持 web 还支持流式常用的? |
12
akira Aug 10, 2025
为了偷懒省事啊
|
13
chaleaochexist OP |
14
chaleaochexist OP 下载 --> 现在
json-web --> grpc-web |
15
SethShi Aug 10, 2025 @chaleaochexist #13 可能没表达清楚, 你说 rpc 只在内部使用, 物联网公司有在用, 音箱(客户端)和服务端通信用的 rpc
|
16
roundgis Aug 10, 2025 via Android
@seth19960929 音箱內置一個單片機?
|
17
chaleaochexist OP |
18
SethShi Aug 10, 2025 |
19
COW Aug 10, 2025
@chaleaochexist grpc-gateway 应该保持轻量,只做协议转换,看中的是高兼容性,bff 更强调的 API 聚合能力,当然 bff 里也可以做协议转换,但两者不冲突。
|
20
skiy Aug 10, 2025
协议定好。服务治理方便。
|
21
EricXuu Aug 11, 2025 via Android 我们的后端服务没有 http ,都是 grpc ,bff 层是由前端 node 维护。
但是后端也有一些对外 API 的场景,比如外部 vendor 回调以及多地区跨机房互调。这些都是走公共的 gateway 转发,不额外维护 http 服务。 |
22
Dogtler Aug 11, 2025
内部全写 grpc ,在网关+中间件+转 http 。服务之间互相调用。
|
23
DefoliationM Aug 11, 2025
这东西很没用,我直接代码层面一个函数转换就能搞定。这东西还要走两遍 http2 ,设计就有问题。
|