[英]How would I generate code based on the Google API?
摘要和問題
我正在尋找用C#生成代碼的方法,以防止大量重復,並按照Google API本身的方式包裝Google API,如其.Net客戶端庫頁面所述 。 編輯: 他們的生成器顯然是用Python編寫的。 我將繼續研究其他.Net選項。
CodeDOM,Roslyn或其他東西應該集中在哪里? 我是否應該完全不考慮代碼生成?如果是,那么應該采取什么替代方式來正確處理這種情況?
細節
我正在為Google .Net API編寫包裝程序,以制作適用於PowerShell(適用於所有Google API)的Google API庫。 我已經可以在三種API上使用它,但是由於我的項目處理了所有身份驗證(及其存儲)和其他諸如分頁的工作,因此我必須基本上包裝每個API方法調用以使用自己的身份驗證,以便用戶不必擔心。 這導致.Net庫中已經存在許多重復的編碼封裝方法:
public Data.Asp Get(string userKey, int codeId)
{
//I have to wrap their get method with my own using GetService(), for example
return GetService().Asps.Get(userKey, codeId).Execute();
}
由於所有這些都是通過Google Discovery API或底層客戶端庫中存在的信息進行的,因此我覺得應該有某種方式來生成代碼並省去一些麻煩。
一些背景和相關信息
在Google API .Net客戶端庫的主頁上指出:
單個Google API的源代碼是使用Discovery API編程生成的。
我想做類似的事情,盡管我不知道該把時間和精力集中在什么地方。 我查找了CodeDOM (以及其固有的局限性), Roslyn以及兩者之間的 一些區別 。 我還檢查了Visual Studio的T4文本模板 。
需要明確的是,我不希望像在Reflection之類的東西那樣在運行時生成代碼,而是要生成庫的一部分,盡管我不確定是要主動還是被動生成。
我在.NET客戶端庫(除其他事項外)上在Google工作。 您的問題影響深遠,但這是基本思路:
用於描述“大多數” Google API的元數據是通過發現文檔進行的 。 描述API的方法和類型。
如您所指出的,然后從Python庫中生成用於訪問Google API的客戶端庫。 (具體來說,使用Django作為模板語言。)
為每個Google API生成代碼后,我們將調用MSBuild,將二進制文件打包,然后將其部署到NuGet。
至於有關如何生成代碼的特定問題,我建議您構建兩個單獨的組件。 第一個是將讀取和解析發現文檔的東西,第二個是將發出代碼的組件。
對於實際的代碼生成,這里有一些個人意見:
因此,我現在建議一個基本的基於文本的解決方案,並看看能為您帶來多大的幫助。 如果您還有其他問題,請隨時給我發消息或在GitHub問題跟蹤器上記錄問題 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.