如何将rpc标记为已弃用

Jan*_*čič 11 protocol-buffers proto3

如果我有这样的服务:

service MyService {
  rpc GetThings(GetThingsRequest) returns (GetThingsResponse);
}
Run Code Online (Sandbox Code Playgroud)

我如何标记GetThings为已弃用?

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

这是针对proto3的.

Chr*_*ian 20

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

看起来可以向服务添加一个已弃用的选项,就像在消息和枚举上一样:

service MyService {
  rpc GetThings(GetThingsRequest) returns (GetThingsResponse) {
    option deprecated = true;
  };
}
Run Code Online (Sandbox Code Playgroud)

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

即使它确实编译,它似乎在使用时不会生成编译器警告.我试图在Java中,与HelloWorld服务Java的快速入门指南.进一步检查生成的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"
Run Code Online (Sandbox Code Playgroud)

在请求消息,服务和文件级别上尝试选项时,我得到了类似的结果.我的预感是这是java代码生成器中缺少的功能.将不推荐使用的选项添加到字段时,我确实得到了所需的编译器警告:

$ ./gradlew installDist
...
Note: Some input files use or override a deprecated API.
...
Run Code Online (Sandbox Code Playgroud)

我看到你的选择:

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

    message HelloRequest {
      string name = 1 [deprecated=true];
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 在grpc方法上不使用use选项(如上所示)不显示编译器警告,并依赖用户只看到此文档.

  • 打开github问题.
  • 上述所有的 :)

  • 看起来像Java的`@Deprecated`注释[自版本1.15.0以来已在`protoc-gen-grpc-java`中支持服务方法和服务](https://github.com/grpc/grpc-java/commit/ 0d4051ca6ee0c0240d79f88082831c22c26c4844#diff-cbc2d12e56678ec0074444b2f71fd184ee85877c94208f68f8e9c7728bd2426e) (4认同)