2017-09-03 15 views
0

残酷なインターフェイスは、複数の言語にわたってコンパイルすることができます。それは単なるテキストファイルなので、スワッガーハブのようなオンラインツールがないのはなぜですか?私は、そのインターフェイスを使用するプロジェクト間で貼り付けインターフェイスをコピーしたくないthriftまたはgrpcインターフェースを格納する場所は?

jvm言語のみがそのインターフェイスを解決することができ、ユーザーフレンドリーな方法ではないので、jarファイルとインターフェイスをパッケージ化することは役に立ちません。それは倹約だけではなく、それはまたgrpcについてです。私はこの質問に関係の任意のドキュメントを見つけることができませんでしたし、あなたのインターフェイスを備えた.protoファイルを持っていると仮定すると、任意のベストプラクティス

+0

Github?たとえば、ProtoBufファイル... https://github.com/AeonLucid/POGOProtos –

+0

gRPCインターフェイスの意味は? Protobuf定義ファイルですか? –

+0

@ɐuıɥɔɐɯ、はい、正確です。現在、私は実装と同じでそれらを格納する –

答えて

1

を見つけることができなかった、各サブプロジェクトは、ファイルについて知っておく必要があります。この問題には主に2つのアプローチがあります。ファイルを提供する、またはファイルをコピーする。

ベンダーこのオプションでファイル

は、すべてのあなたのインターフェース定義を格納し(Gitのレポのような)追加のプロジェクトを作ります。インタフェースについて知る必要のある各プロジェクトには、インタフェースプロジェクトを含むリファレンス(gitサブモジュールまたはgitサブツリー)が含まれます。プロジェクトを構築する際には、インターフェイスを同期させてから必要なコードを生成する必要があります。

このアプローチの欠点は、Gitのサブツリーとサブモジュール(または任意のバージョンコントロール使用)は使用することがより困難であり、あなたのコードを構築する人々によって余分な作業を必要とすることです。サブプロジェクトのインタフェースを変更した場合、その変更を上流のインタフェースプロジェクトに適用することは困難です。

コピーこのオプションでファイル

、手動でプロジェクト間の周りのファイルをコピーして、手動で同期に保管してください。変更を加えるたびに、その変更をそのインタフェースに依存する他のすべてのプロジェクトに適用したいことがあります。しかし、Protobufを使用する場合は、にはがないことに注意することが重要です。 Protosは後方互換性が高いように設計されています。例えば

、他の1つの形態からプロト定義を変更しているコードは、実際には両方の形式を使用することができます。古いコードでは古いフォームが表示され、新しいコードでは古いフォームや新しいフォームを見ることができます。すべてのユーザーがアップグレードされると、古いフォームを削除できます。

このアプローチの欠点は、それはあなたのコードのデコード部分に複雑さをプッシュしていることです。あなたは、古いクライアントの数が不明で、下位互換性が必要になります。すべてのプロジェクトがインターフェース定義と同期するわけではないので、インターフェースのすべてのユーザーはより柔軟にする必要があります。この問題はProtoに固有の問題ではなく、自然に発生します。それは誰にも起こります。

第二の欠点は、手動で変更をコピーする必要がされています。フィールド番号や名前を決して再利用しないでください。インターフェイスに依存するプロジェクトがたくさんある場合は、より多くの作業ができます。

どちらを選択しますか?

どちらのアプローチが他よりも客観的に優れています。それぞれがビルドの異なる部分に複雑さをもたらします。私が見てきたことから、ほとんどの人は高度なgitコマンドを学ぶよりも簡単なので、ファイルをコピーすることを好みます。

関連する問題