如果我有这样的服务:
service MyService {
rpc GetThings(GetThingsRequest) returns (GetThingsResponse);
}
我如何将GetThings
标记为已弃用?
我知道如何将字段或邮件标记为已弃用,但我无法找到有关rpcs的任何信息。
这是针对proto3的。
答案 0 :(得分:13)
TL; DR:这是可能的,但它不会生成编译器警告。考虑使用字段级弃用。
看起来可以向服务添加一个已弃用的选项,就像在消息和枚举上一样:
service MyService {
rpc GetThings(GetThingsRequest) returns (GetThingsResponse) {
option deprecated = true;
};
}
在https://github.com/google/protobuf/issues/1734
中找到了这个即使它确实编译,它不似乎在使用时会生成编译器警告。我使用HelloWorld service中的Java quick start guide在Java中尝试过。进一步检查生成的java文件HelloWorldProto.java,它显示该类没有添加@Deprecated
java注释,但文件中存在一些差异,很可能是原型描述中的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方法使用不使用选项(如上所示)不显示编译器警告,并依赖用户只看到此文档。