grpc gateway 存在的意义是什么 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
chaleaochexist
V2EX    程序员

grpc gateway 存在的意义是什么

  •  
  •   chaleaochexist 138 天前 3355 次点击
    这是一个创建于 138 天前的主题,其中的信息可能已经有所发展或是发生改变。

    AI 的回答不能让我信服. 它总是在强调, 大项目 vs 小项目, 以及灵活性等等.

    我想知道它存在的真正的, 实际的意义是什么? 或者说,我为什么要为一个 api 提供两种协议?

    在譬如, 为了给浏览器使用? 为什么不单独写一个 BFF 层. 本来 grpc 服务就是给内部使用的.

    谢谢.

    23 条回复    2025-08-11 11:08:06 +08:00
    SethShi
        1
    SethShi  
       138 天前   1
    一套代码两套运行机制, 比如团队里对 GRPC 很熟悉, 并且基于此搭建了整套服务, (甚至可能客户端和服务端通信使用 rpc)

    这时候三方想要和你们合作, 给你们 1kw, 让你们暴露 HTTP 接口分享资源给他们, 直接开发一套 HTTP 肯定麻烦, 直接用 grpc-gateway 包装一层, 写文档给他们用
    chaleaochexist
        2
    chaleaochexist  
    OP
       138 天前
    @seth19960929 你这个假设不太实际啊, 真给我 1kw 我绝逼单独开发一套...保准让客户满意.
    SethShi
        3
    SethShi  
       138 天前   1
    @chaleaochexist 太真实存在了, 单独开发一套绝对不是这么简单的
    1. 项目太复杂, 老项目已经运行了好几年
    2. 时间太赶, 需求方要你下周提供
    3. 1kw 给的不是你, 给的是公司, 你只需要提供最快的实现方式
    mooyo
        4
    mooyo  
       138 天前   1
    @chaleaochexist 你再单独开发一套,是不是就同时维护了两份代码?有考虑过可维护性么?

    而且,即使团队想全用 GRPC ,也不可避免地会遇到只能使用 HTTP 的场景,比如内网用 lua 调用接口
    SethShi
        5
    SethShi  
       138 天前   1
    本质就是一套代码, 提供两种调用方式,
    你所说的 BFF, 是指启一个 HTTP 服务, 然后内部连接 rpc, 代理一层?
    那你为何这样做, grpc-gateway 就是这样的一个标准解决方案
    chaleaochexist
        6
    chaleaochexist  
    OP
       138 天前
    @seth19960929 代理一层 是因为 rpc 提供的服务是不考虑 客户端实际场景的, 是站在自己人内部调用的角度.

    如果是考虑外部调用的话, 我就不会用 grpc 了. 不知道我表达的是否清晰.
    chaleaochexist
        7
    chaleaochexist  
    OP
       138 天前
    @seth19960929 或者说为什么会有人一开始用 grpc 开发一套系统给外部调用?
    chaleaochexist
        8
    chaleaochexist  
    OP
       138 天前
    @mooyo 有道理!!!
    SethShi
        9
    SethShi  
       138 天前   1
    @chaleaochexist #6 你搜一下, 挺多物联网用的, 我认识的一个做儿童音箱的公司就在用
    pingdog
        10
    pingdog  
       138 天前 via Android
    不用 gateway ,你让切图仔直接传 protobuf ?
    AoEiuV020JP
        11
    AoEiuV020JP  
       138 天前 via Android
    我也纠结,如果一开始就有支持 web 的需求,是不是不应该选择 grpc ,
    如果不需要流式的话直接 jsonrpc 还简单方便,
    有什么方案支持 web 还支持流式常用的?
    akira
        12
    akira  
       138 天前
    为了偷懒省事啊
    chaleaochexist
        13
    chaleaochexist  
    OP
       138 天前
    @fuzzsh 下载前端早就不是切图仔了, 用 json-web
    另外如果是和前端配合, 后端一开始就不可能用 grpc.


    @seth19960929 大佬你指的是哪句话 "挺多物联网用的(什么?),"
    chaleaochexist
        14
    chaleaochexist  
    OP
       138 天前
    下载 --> 现在
    json-web --> grpc-web
    SethShi
        15
    SethShi  
       138 天前   1
    @chaleaochexist #13 可能没表达清楚, 你说 rpc 只在内部使用, 物联网公司有在用, 音箱(客户端)和服务端通信用的 rpc
    roundgis
        16
    roundgis  
       138 天前 via Android
    @seth19960929 音箱置一片?
    chaleaochexist
        17
    chaleaochexist  
    OP
       138 天前
    @seth19960929 明白, 所以当后续有新的第三方需要 http 的场景的时候, 就是 grpc-gateway 大放光彩的时候了?

    受教, 多谢.
    SethShi
        18
    SethShi  
       138 天前   1
    @roundgis 普通音箱我不太了解, 做的是智能音箱
    @chaleaochexist #17 我 #1 楼的回答就差不多是这个意思
    COW
        19
    COW  
       138 天前
    @chaleaochexist grpc-gateway 应该保持轻量,只做协议转换,看中的是高兼容性,bff 更强调的 API 聚合能力,当然 bff 里也可以做协议转换,但两者不冲突。
    skiy
        20
    skiy  
       138 天前
    协议定好。服务治理方便。
    EricXuu
        21
    EricXuu  
       138 天前 via Android   1
    我们的后端服务没有 http ,都是 grpc ,bff 层是由前端 node 维护。
    但是后端也有一些对外 API 的场景,比如外部 vendor 回调以及多地区跨机房互调。这些都是走公共的 gateway 转发,不额外维护 http 服务。
    Dogtler
        22
    Dogtler  
       137 天前
    内部全写 grpc ,在网关+中间件+转 http 。服务之间互相调用。
    DefoliationM
        23
    DefoliationM  
       137 天前
    这东西很没用,我直接代码层面一个函数转换就能搞定。这东西还要走两遍 http2 ,设计就有问题。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1042 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 18:22 PVG 02:22 LAX 10:22 JFK 13:22
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86