私がこのようなサービスを持っている場合:
service MyService {
rpc GetThings(GetThingsRequest) returns (GetThingsResponse);
}
GetThings
を非推奨としてマークするにはどうすればよいですか?
フィールドまたはメッセージを非推奨としてマークする方法を知っていますが、rpcsに関する情報が見つかりません。
これはproto3用です。
TL; DR:可能ですが、コンパイラの警告は生成されません。フィールドレベルの非推奨を使用することを検討してください。
メッセージや列挙型のように、非推奨のオプションをサービスに追加できるようです。
service MyService {
rpc GetThings(GetThingsRequest) returns (GetThingsResponse) {
option deprecated = true;
};
}
これは次の場所で見つかりました: https://github.com/google/protobuf/issues/1734
コンパイルはしますが、notを使用すると、コンパイラの警告が生成されるようです。 Javaクイックスタートガイド の HelloWorldサービス を使用してJavaで試しました。生成されたJavaファイル、HelloWorldProto.Javaをさらに調べると、クラスが@Deprecated
Javaアノテーションを追加していないことがわかりますが、いくつかありますファイルの違い、おそらくプロト記述のプロト注釈:
$ 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メソッドで非推奨のオプションを使用してください(上記のように)コンパイラの警告は表示されず、このドキュメントを表示するのはユーザーに依存します。