web-dev-qa-db-ja.com

rpcを非推奨としてマークする方法

私がこのようなサービスを持っている場合:

service MyService {
  rpc GetThings(GetThingsRequest) returns (GetThingsResponse);
}

GetThingsを非推奨としてマークするにはどうすればよいですか?

フィールドまたはメッセージを非推奨としてマークする方法を知っていますが、rpcsに関する情報が見つかりません。

これはproto3用です。

12
Jan Hančič

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メソッドで非推奨のオプションを使用してください(上記のように)コンパイラの警告は表示されず、このドキュメントを表示するのはユーザーに依存します。

  • Githubの問題を開きます。
  • 上記のすべて :)
17
Christian