問題タブ [proto3]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
protocol-buffers - gRPC / Protobuf インターフェイスのバージョン管理
多くのアプリケーションを接続するために gRCP/Protobuf を使用するとします。それらのアプリケーションは、独自のチームで独自の速度で開発およびリリースされます。時間の経過とともに、定義されたインターフェイスで異なるバージョンを使用する、同じアプリの異なるバージョン (ユーザー PC にインストールされるデスクトップ アプリなど) が存在します。
Protobuf は下位互換性を確保するためのものですが、異なる時点で実行されているインターフェイスのバージョンを知る方法はありますか?
最も簡単な実装は、インターフェースのバージョンをアプリのバージョンと同じにすることです。しかし、多くの言語が使用されているため、それらすべてにアプリのバージョン管理を実装することは簡単ではありません。
では、どのようにインターフェイスをバージョン化し、サーバーにクライアントのバージョンを知らせますか?サーバーはログに記録できるはずだと思います
AppName v.version からの DATETIME 接続 [インターフェイス v.version を使用]
grpc - Protobuf 3 がコントラクトの加法性を破る
分散環境 (「マイクロサービス」) で gRPC と共に Protobuf 3 を使用しています。
Protobuf 3 で設定されていない値または欠落している値をサポートしていないため、コントラクトの加算性に関連する次の問題が発生しました。
Service Aと、 Team BとTeam Cが所有する2 つのコンシューマー サービスBとCがあるとします。
フィールド、たとえばブール値をサービスAのコントラクトに追加すると、最初はデフォルト値があり、データベースにそのまま書き込まれます。
次に、チーム Bは更新されたコントラクトを使用して話すようにサービスを更新し、フィールド値として「true」を渡します。次に、チーム Cは引き続き古いコントラクトを使用し、同じサービスを呼び出します。値は false に置き換えられます。でもチームCはそんなつもりはなかったし、その分野のことを全く知らなかった。
したがって、サービス A は契約をまったく延長できません。さまざまな理由でまだ更新されていないコンシューマーはデータに損害を与える可能性があり、サービス A はそれに対して何もできないからです。
Thrift では、そのようなことは単一のチェック ( .isSet()
) だけで行われます。
プリミティブをオブジェクトにラップするなどの汚い回避策がありますが、ライブラリ実装固有の参照によるチェック (少なくとも Java では) を使用する必要があります。また、最終的にはすべてをラッパーでラップする必要がありますが、ご想像のとおり、これも優れたソリューションではありません。
2017 年の Protobuf 3 でこのような状況を管理するために使用するベスト プラクティスは何ですか? チーム/サービス間の契約の更新をどのように管理/調整しますか? ありがとう
注:この質問は、設定されていない/欠落している値の検出の欠如を実装する方法に関するものではなく、それをどのように処理し、 Protobuf 3 の哲学に従うかに関するものです。
protocol-buffers - json を .proto のペイロードとして渡す方法
次のページに従って、json ペイロードで送信できるはずです: https://developers.google.com/protocol-buffers/docs/proto3 「JSON マッピング」の下。
メッセージの一部として json ペイロードを送信したいのですが、次の .proto ファイルがあります。
しかし、それをコンパイルすると、次のエラーが発生します。
「Struct」も試しましたが、同じエラーが発生しました。
使い方を誤解していますか?json ペイロードを送信する必要がある場合、文字列として渡す必要がありますか?
ありがとう
java - proto コンパイラによって生成された Java クラスがビルドに失敗する
シンプルな .proto ファイルがあり、そこから Java クラスを生成します。proto ファイルは次のようになります。
エラーは次のとおりです。
3.1.0
クラスを生成し、Java ソースをビルドするために使用しています。何か設定が間違っているのでしょうか、proto ファイルが間違っているのでしょうか、それとも proto のバグですか?
grpc - gRPC オプション値でセミコロンが必要か、オプションか、または許可されないか?
次のような 1 つのコードが表示されます。
rpc SayFallback (FooRequest) returns (FooResponse) {
option (com.example.proto.options.bar) = {
value : "{ message:\"baz\" }";
};
}
次のような別のもの:
rpc SayFallback (FooRequest) returns (FooResponse) {
option (com.example.proto.options.bar) = {
value : "{ message:\"baz\" }"
};
}
最初のものは;
ライン上にありますがvalue
、2番目のものはそうではありません。規格上はどちらでもOKですか?
protocol-buffers - rpc を非推奨としてマークする方法
このようなサービスがある場合:
GetThings
非推奨としてマークするにはどうすればよいですか?
フィールドまたはメッセージを非推奨としてマークする方法は知っていますが、rpcs に関する情報が見つかりません。
これはproto3用です。