問題タブ [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.

0 投票する
3 に答える
11032 参照

protocol-buffers - gRPC / Protobuf インターフェイスのバージョン管理

多くのアプリケーションを接続するために gRCP/Protobuf を使用するとします。それらのアプリケーションは、独自のチームで独自の速度で開発およびリリースされます。時間の経過とともに、定義されたインターフェイスで異なるバージョンを使用する、同じアプリの異なるバージョン (ユーザー PC にインストールされるデスクトップ アプリなど) が存在します。

Protobuf は下位互換性を確保するためのものですが、異なる時点で実行されているインターフェイスのバージョンを知る方法はありますか?

最も簡単な実装は、インターフェースのバージョンをアプリのバージョンと同じにすることです。しかし、多くの言語が使用されているため、それらすべてにアプリのバージョン管理を実装することは簡単ではありません。

では、どのようにインターフェイスをバージョン化し、サーバーにクライアントのバージョンを知らせますか?サーバーはログに記録できるはずだと思います

AppName v.version からの DATETIME 接続 [インターフェイス v.version を使用]

0 投票する
2 に答える
281 参照

grpc - Protobuf 3 がコントラクトの加法性を破る

分散環境 (「マイクロサービス」) で gRPC と共に Protobuf 3 を使用しています。

Protobuf 3 で設定されていない値または欠落している値をサポートしていないため、コントラクトの加算性に関連する次の問題が発生しました。

Service Aと、 Team BTeam Cが所有する2 つのコンシューマー サービスBCがあるとします。

フィールド、たとえばブール値をサービスAのコントラクトに追加すると、最初はデフォルト値があり、データベースにそのまま書き込まれます。

次に、チーム Bは更新されたコントラクトを使用して話すようにサービスを更新し、フィールド値として「true」を渡します。次に、チーム Cは引き続き古いコントラクトを使用し、同じサービスを呼び出します。値は false に置き換えられます。でもチームCはそんなつもりはなかったし、その分野のことを全く知らなかった。

したがって、サービス A は契約をまったく延長できません。さまざまな理由でまだ更新されていないコンシューマーはデータに損害を与える可能性があり、サービス A はそれに対して何もできないからです。

Thrift では、そのようなことは単一のチェック ( .isSet()) だけで行われます。

プリミティブをオブジェクトにラップするなどの汚い回避策がありますが、ライブラリ実装固有の参照によるチェック (少なくとも Java では) を使用する必要があります。また、最終的にはすべてをラッパーでラップする必要がありますが、ご想像のとおり、これも優れたソリューションではありません。

2017 年の Protobuf 3 でこのような状況を管理するために使用するベスト プラクティスは何ですか? チーム/サービス間の契約の更新をどのように管理/調整しますか? ありがとう

:この質問は、設定されていない/欠落している値の検出の欠如を実装する方法に関するものではなく、それをどのように処理し、 Protobuf 3 の哲学に従うかに関するものです。

0 投票する
5 に答える
5318 参照

protocol-buffers - json を .proto のペイロードとして渡す方法

次のページに従って、json ペイロードで送信できるはずです: https://developers.google.com/protocol-buffers/docs/proto3 「JSON マッピング」の下。

メッセージの一部として json ペイロードを送信したいのですが、次の .proto ファイルがあります。

しかし、それをコンパイルすると、次のエラーが発生します。

「Struct」も試しましたが、同じエラーが発生しました。

使い方を誤解していますか?json ペイロードを送信する必要がある場合、文字列として渡す必要がありますか?

ありがとう

0 投票する
0 に答える
1019 参照

java - proto コンパイラによって生成された Java クラスがビルドに失敗する

シンプルな .proto ファイルがあり、そこから Java クラスを生成します。proto ファイルは次のようになります。

エラーは次のとおりです。

3.1.0クラスを生成し、Java ソースをビルドするために使用しています。何か設定が間違っているのでしょうか、proto ファイルが間違っているのでしょうか、それとも proto のバグですか?

0 投票する
1 に答える
143 参照

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ですか?

0 投票する
1 に答える
10887 参照

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

このようなサービスがある場合:

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

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

これはproto3用です。