V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
x97bgt
V2EX  ›  程序员

把 REST API 转换成 gRPC,要把请求里 body 的东西一个个提取到*.proto 中吗?

  •  
  •   x97bgt · 2019-09-25 17:52:16 +08:00 · 1467 次点击
    这是一个创建于 1647 天前的主题,其中的信息可能已经有所发展或是发生改变。

    老的 API 都是 REST 类型的,有两百多个。现在要保留这些 REST API,同时提供对应的 gRPC 调用。

    我的想法是在 ProtBuf 里面就给 headers,params,path 这几个字段,都是 string 类型,不用关心具体内容。然后构造成 REST 请求,丢到后面去 unmarsahll 一下,执行相应逻辑。

    但这个有一个问题。protobuf 可以告诉 Client 怎么调用 gRPC Method。如果使用这种大颗粒的方法,那 Client 就不知道要往里面填什么内容(比如 body 是 string 类型,但调用这个 API 必须往里面填 username 和 password。这样就完全看不出来)。

    如果一个个 API 检查,可以知道具体需要的哪些字段,写出对应的*.proto,Client 一看就知道怎么使用。但两百多个 API 啊,这怎么检查的过来。

    这些 REST API 太底层了,几乎不遵循什么规范。

    有啥好解决的方案不?

    2 条回复    2019-09-25 19:51:19 +08:00
    index90
        1
    index90  
       2019-09-25 19:25:44 +08:00
    根据原有的 API,编写 Proto 文件
    根据 Proto 文件生成 gRPC 和 Rest 框架,注意,Client 和 Server 的 interface 应该只有一套,这样逻辑代码可以不用修改,就能使用两个框架。
    Micro 公司有个 go-micro 项目,可以参考一下。
    fishCatcher
        2
    fishCatcher  
       2019-09-25 19:51:19 +08:00 via iPhone
    可以在 proto 中加入一个 apiid 字段供判断,然后所有字段都写到同一个 proto 中
    不知道有没有理解对 lz 的意思
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2866 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:37 · PVG 19:37 · LAX 04:37 · JFK 07:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.