V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
chaleaochexist
V2EX  ›  程序员

grpc gateway 存在的意义是什么

  •  
  •   chaleaochexist · Aug 10, 2025 · 3815 views
    This topic created in 262 days ago, the information mentioned may be changed or developed.

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

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

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

    谢谢.

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

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

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

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


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

    受教, 多谢.
    SethShi
        18
    SethShi  
       Aug 10, 2025   ❤️ 1
    @roundgis 普通音箱我不太了解, 做的是智能音箱
    @chaleaochexist #17 我 #1 楼的回答就差不多是这个意思
    COW
        19
    COW  
       Aug 10, 2025
    @chaleaochexist grpc-gateway 应该保持轻量,只做协议转换,看中的是高兼容性,bff 更强调的 API 聚合能力,当然 bff 里也可以做协议转换,但两者不冲突。
    skiy
        20
    skiy  
       Aug 10, 2025
    协议定好。服务治理方便。
    EricXuu
        21
    EricXuu  
       Aug 11, 2025 via Android   ❤️ 1
    我们的后端服务没有 http ,都是 grpc ,bff 层是由前端 node 维护。
    但是后端也有一些对外 API 的场景,比如外部 vendor 回调以及多地区跨机房互调。这些都是走公共的 gateway 转发,不额外维护 http 服务。
    Dogtler
        22
    Dogtler  
       Aug 11, 2025
    内部全写 grpc ,在网关+中间件+转 http 。服务之间互相调用。
    DefoliationM
        23
    DefoliationM  
       Aug 11, 2025
    这东西很没用,我直接代码层面一个函数转换就能搞定。这东西还要走两遍 http2 ,设计就有问题。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1500 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 57ms · UTC 16:51 · PVG 00:51 · LAX 09:51 · JFK 12:51
    ♥ Do have faith in what you're doing.