Protocol buffers 如何将rpc标记为已弃用

Protocol buffers 如何将rpc标记为已弃用,protocol-buffers,proto3,Protocol Buffers,Proto3,如果我有这样的服务: service MyService { rpc GetThings(GetThingsRequest) returns (GetThingsResponse); } 如何将GetThings标记为已弃用 我知道如何将字段或消息标记为已弃用,但我找不到有关RPC的任何信息 这是用于proto3的。TL;DR:这是可能的,但它不会生成编译器警告。考虑使用字段级弃用。 看起来可以向服务中添加不推荐的选项,就像在消息和枚举中一样: service MyService {

如果我有这样的服务:

service MyService {
  rpc GetThings(GetThingsRequest) returns (GetThingsResponse);
}
如何将
GetThings
标记为已弃用

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


这是用于proto3的。

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

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

service MyService {
  rpc GetThings(GetThingsRequest) returns (GetThingsResponse) {
    option deprecated = true;
  };
}
在以下内容中找到:

即使它确实编译,但在使用时似乎不会生成编译器警告。我尝试了Java,使用来自的。进一步检查生成的java文件HelloWorldProto.java,它表明该类没有添加
@Deprecated
java注释,但该文件中存在一些差异,很可能是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"
在我看来,你的选择是:

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

    message HelloRequest {
      string name = 1 [deprecated=true];
    }
    
  • 在grpc方法上使用不推荐的选项(如上所示),不会显示编译器警告,并且依赖用户查看此文档

  • 打开github问题
  • 以上所有内容:)
message HelloRequest {
  string name = 1 [deprecated=true];
}