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