簡體   English   中英

如何基於Google API生成代碼?

[英]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 StudioT4文本模板

需要明確的是,我希望像在Reflection之類的東西那樣在運行時生成代碼,而是要生成庫的一部分,盡管我不確定是要主動還是被動生成。

我在.NET客戶端庫(除其他事項外)上在Google工作。 您的問題影響深遠,但這是基本思路:

用於描述“大多數” Google API的元數據是通過發現文檔進行的 描述API的方法和類型。

如您所指出的,然后從Python庫中生成用於訪問Google API的客戶端庫。 (具體來說,使用Django作為模板語言。)

為每個Google API生成代碼后,我們將調用MSBuild,將二進制文件打包,然后將其部署到NuGet。

至於有關如何生成代碼的特定問題,我建議您構建兩個單獨的組件。 第一個是將讀取和解析發現文檔的東西,第二個是將發出代碼的組件。

對於實際的代碼生成,這里有一些個人意見:

  • 最簡單的方法是使用基於文本的模板語言。 (例如Django或自己編寫。)
  • CodeDOM是一個有趣的選擇,但可能比您想要的難得多。 這是Visual Studio進行某些代碼生成的方式,例如,您描述代碼,CodeDOM將發出C#,VB,MC ++來滿足您的需求。 但是,由於您僅關注C#,所以支持多種語言的CodeDOM的好處就沒有用。
  • 羅斯林(Roslyn)當然是一種很酷的新技術,但這可能用處不大。 我相信Roslyn能夠動態地對代碼進行建模並將AST往返於磁盤。 但這可能是過大的,因為您不是要構建通用的C#代碼生成解決方案,而是僅針對生成與API發現文檔匹配的代碼。

因此,我現在建議一個基本的基於文​​本的解決方案,並看看能為您帶來多大的幫助。 如果您還有其他問題,請隨時給我發消息或在GitHub問題跟蹤器上記錄問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM