如何将 rpc 标记为已弃用
How to mark rpc as deprecated
如果我有这样的服务:
service MyService {
rpc GetThings(GetThingsRequest) returns (GetThingsResponse);
}
如何将 GetThings
标记为已弃用?
我知道如何将字段或消息标记为已弃用,但我找不到任何有关 rpc 的信息。
这是用于 proto3 的。
TL;DR:有可能,但不会生成编译器警告。考虑使用字段级弃用。
看起来可以向服务添加已弃用的选项,就像在消息和枚举中一样:
service MyService {
rpc GetThings(GetThingsRequest) returns (GetThingsResponse) {
option deprecated = true;
};
}
发现于:https://github.com/google/protobuf/issues/1734
尽管它可以编译,但在使用时 not 似乎会生成编译器警告。我尝试在 Java 中使用 HelloWorld service from the Java quick start guide。进一步查看生成的java文件,HelloWorldProto.java,可以看出class没有添加@Deprecated
java注解,但是文件中还是有些区别的,很可能是原型描述中的原型注释:
$ diff HelloWorldProto-{control,method}.java
38c38
< "ssage0[=11=]1 [=11=]1(\t2I\n[=11=]7Greeter2>\n0SayHello20.hel" +
---
> "ssage0[=11=]1 [=11=]1(\t2L\n[=11=]7Greeter2A\n0SayHello20.hel" +
40,41c40,41
< "eply\"[=11=]0B6\n3io.grpc.examples.helloworldB7H" +
< "elloWorldProtoP[=11=]12[=11=]2[=11=]3HLWb[=11=]6proto3"
---
> "eply\"[=11=]30[=11=]2[=11=]1B6\n3io.grpc.examples.helloworld" +
> "B7HelloWorldProtoP[=11=]12[=11=]2[=11=]3HLWb[=11=]6proto3"
我在尝试请求消息、服务和文件级别的选项时也得到了类似的结果。我的直觉是,这是 java 代码生成器中缺少的功能。将不推荐使用的选项添加到字段时,我确实收到了想要的编译器警告:
$ ./gradlew installDist
...
Note: Some input files use or override a deprecated API.
...
我认为你的选择:
将请求消息中的所有字段标记为已弃用。然后你将在任何人使用它时立即显示编译器警告。喜欢:
message HelloRequest {
string name = 1 [deprecated=true];
}
在 grpc 方法上使用不推荐使用的选项(如上所示)没有显示编译器警告,并且依赖用户只看这个文档。
- 打开一个 github 问题。
- 以上全部:)
如果我有这样的服务:
service MyService {
rpc GetThings(GetThingsRequest) returns (GetThingsResponse);
}
如何将 GetThings
标记为已弃用?
我知道如何将字段或消息标记为已弃用,但我找不到任何有关 rpc 的信息。
这是用于 proto3 的。
TL;DR:有可能,但不会生成编译器警告。考虑使用字段级弃用。
看起来可以向服务添加已弃用的选项,就像在消息和枚举中一样:
service MyService {
rpc GetThings(GetThingsRequest) returns (GetThingsResponse) {
option deprecated = true;
};
}
发现于:https://github.com/google/protobuf/issues/1734
尽管它可以编译,但在使用时 not 似乎会生成编译器警告。我尝试在 Java 中使用 HelloWorld service from the Java quick start guide。进一步查看生成的java文件,HelloWorldProto.java,可以看出class没有添加@Deprecated
java注解,但是文件中还是有些区别的,很可能是原型描述中的原型注释:
$ diff HelloWorldProto-{control,method}.java
38c38
< "ssage0[=11=]1 [=11=]1(\t2I\n[=11=]7Greeter2>\n0SayHello20.hel" +
---
> "ssage0[=11=]1 [=11=]1(\t2L\n[=11=]7Greeter2A\n0SayHello20.hel" +
40,41c40,41
< "eply\"[=11=]0B6\n3io.grpc.examples.helloworldB7H" +
< "elloWorldProtoP[=11=]12[=11=]2[=11=]3HLWb[=11=]6proto3"
---
> "eply\"[=11=]30[=11=]2[=11=]1B6\n3io.grpc.examples.helloworld" +
> "B7HelloWorldProtoP[=11=]12[=11=]2[=11=]3HLWb[=11=]6proto3"
我在尝试请求消息、服务和文件级别的选项时也得到了类似的结果。我的直觉是,这是 java 代码生成器中缺少的功能。将不推荐使用的选项添加到字段时,我确实收到了想要的编译器警告:
$ ./gradlew installDist
...
Note: Some input files use or override a deprecated API.
...
我认为你的选择:
将请求消息中的所有字段标记为已弃用。然后你将在任何人使用它时立即显示编译器警告。喜欢:
message HelloRequest { string name = 1 [deprecated=true]; }
在 grpc 方法上使用不推荐使用的选项(如上所示)没有显示编译器警告,并且依赖用户只看这个文档。
- 打开一个 github 问题。
- 以上全部:)