2017-09-03 100 views
0

thrift接口可以跨多種語言進行編譯。它只是文本文件,爲什麼沒有像swagger hub這樣的在線工具?我不想在使用該接口的項目上覆制粘貼界面哪裏存儲節儉或grpc接口?

我也不覺得將接口與jar文件打包很有用,因爲只有jvm語言才能解析該接口,並且它不是用戶友好的方式。這不僅關乎節儉,也關乎grpc。我沒有找到任何有關這個問題的文檔,也找不到任何最佳實踐

+0

Github?例如,ProtoBuf文件... https://github.com/AeonLucid/POGOProtos –

+0

你是什麼意思的gRPC接口? Protobuf定義文件? –

+0

@ɐuıɥɔɐɯ,是的,正好。目前我存儲在與執行 –

回答

1

假設你的接口有一個.proto文件,每個子項目都需要知道該文件。有兩種主要的解決方法:供應文件或複製文件。

賣方文件

在這個選項中,你做加法項目(如混帳回購協議),它存儲所有的接口定義。每個需要了解接口的項目都將包含一個包含接口項目的引用(git submodule或git subtree)。當你建立你的項目時,接口將需要同步,然後用來生成必要的代碼。

這種方法的缺點是git子樹和子模塊(或者你使用的任何版本控制)更難使用,並且需要構建代碼的人做額外的工作。如果對子項目中的界面進行更改,則很難將這些更改上游應用到界面項目。

複製文件

在此選項中,您手動將文件複製周圍項目之間,並手動保持同步。每次進行更改時,都需要將該更改應用於依賴於該界面的每個其他項目。雖然使用Protobuf,但重要的是要注意,你沒有這樣做。 Protos被設計成高度向後兼容。

例如,將原型定義從一種形式更改爲另一種形式的代碼實際上可以使用這兩種形式。舊代碼將查看舊窗體,新代碼可以決定查看舊窗體還是新窗體。一旦所有用戶都升級完畢,您可以刪除舊的表單。

這種方法的缺點是它會將複雜性推入代碼的解碼部分。您最終需要向後兼容,使用未知數量的舊客戶端。由於不是每個項目都會與接口定義同步,所以接口的所有用戶都需要更加靈活。這個問題不是特定於Proto,而是自然發生的;它發生在每個人身上。

第二個缺點是必須手動複製更改。您必須確保永遠不要重複使用字段編號或名稱。如果你有很多依賴於界面的項目,那麼對你來說更多的工作。

要選擇哪個?

這兩種方法在客觀上都不如其他方法好。每個人都將複雜性推向構建的不同部分。從我所看到的,大多數人喜歡複製文件,因爲它比學習高級git命令更容易。