【问题标题】:How to mark rpc as deprecated如何将 rpc 标记为已弃用
【发布时间】:2017-04-07 10:29:54
【问题描述】:

如果我有这样的服务:

service MyService {
  rpc GetThings(GetThingsRequest) returns (GetThingsResponse);
}

如何将GetThings 标记为已弃用?

我知道如何将字段或消息标记为已弃用,但我找不到任何有关 RPC 的信息。

这是为 proto3 准备的。

【问题讨论】:

    标签: protocol-buffers proto3


    【解决方案1】:

    TL;DR:这是可能的,但它不会生成编译器警告。考虑使用字段级弃用。

    看起来可以向服务添加不推荐使用的选项,就像在消息和枚举上一样:

    service MyService {
      rpc GetThings(GetThingsRequest) returns (GetThingsResponse) {
        option deprecated = true;
      };
    }
    

    发现于:https://github.com/google/protobuf/issues/1734

    即使它可以编译,它似乎在使用时会生成编译器警告。我在 Java 中尝试过,使用来自 Java quick start guideHelloWorld service。进一步查看生成的java文件HelloWorldProto.java,发现该类没有添加@Deprecatedjava注解,但文件有一些差异,很可能是proto描述中的proto注解:

    $ diff HelloWorldProto-{control,method}.java
    38c38
    <       "ssage\030\001 \001(\t2I\n\007Greeter\022>\n\010SayHello\022\030.hel" +
    ---
    >       "ssage\030\001 \001(\t2L\n\007Greeter\022A\n\010SayHello\022\030.hel" +
    40,41c40,41
    <       "eply\"\000B6\n\033io.grpc.examples.helloworldB\017H" +
    <       "elloWorldProtoP\001\242\002\003HLWb\006proto3"
    ---
    >       "eply\"\003\210\002\001B6\n\033io.grpc.examples.helloworld" +
    >       "B\017HelloWorldProtoP\001\242\002\003HLWb\006proto3"
    

    在尝试请求消息、服务和文件级别的选项时,我也得到了类似的结果。我的直觉是,这是 java 代码生成器中缺少的功能。在向字段添加不推荐使用的选项时,我确实收到了想要的编译器警告:

    $ ./gradlew installDist
    ...
    Note: Some input files use or override a deprecated API.
    ...
    

    我认为你的选择:

    • 将请求消息中的所有字段标记为已弃用。然后,一旦有人使用它,您就会显示编译器警告。喜欢:

      message HelloRequest {
        string name = 1 [deprecated=true];
      }
      
    • 使用 grpc 方法上已弃用的选项(如上所示)不显示编译器警告,请用户仅查看此文档。

    • 打开一个 github 问题。
    • 以上所有 :)
    猜你喜欢
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 2014-08-20
    • 2021-12-27
    • 2010-09-22
    • 1970-01-01
    • 2022-09-22
    • 1970-01-01
    相关资源
    最近更新 更多