2015-10-15 56 views
1

我正在將組合的Azure網站(包括控制器和ApiController)遷移到拆分的Web應用程序和API應用程序。我們稱之爲MyApp。在開發/測試/生產環境中對Swagger使用API​​應用程序

我創建了MyAppDevApi,MyAppTestApi和MyAppProductionApi API應用程序(在不同的應用程序服務中)來託管這三種環境,期望將代碼從一種環境推廣到另一種環境。

到目前爲止,我只部署到MyAppDevApi,因爲我剛剛開始。

當我做Add/Azure API App Client到我的UI專用項目來開始引用API應用程序,並將其指向MyAppDevApi時,它使用AutoRest在我的代碼中創建類。這些類現在都有名稱MyAppDevApi,而不僅僅是MyAppApi,它是我正在部署到每個環境的代碼的實際名稱空間。顯然,我無法檢查...我怎麼能通過測試和產品來推廣?

Swagger JSON中沒有提及此名稱的內容,所以它必須位於AutoRest端(我認爲)。

有沒有人想出一個策略或解決方法來處理這個多API環境的推廣問題?

編輯

到目前爲止,我想出了是從API應用程序下載揚鞭到本地文件(再次,只有從原代碼的命名空間,而不是最好的東西從API應用程序的名稱),然後將其導入Web應用程序。這將在Web應用程序中生成具有我期望的命名的類。

問題是,我必須編輯生成的MyAppApi.cs文件的_baseUri屬性以從AppSetting中拉出,具有不同的web.config.dev,.test,.prod,然後執行web.config轉換。我的意思是說,這將起作用,但每次我更改API應用程序的界面時,我都會重新生成...然後我會記得再次更改_baseUri ...以及某個人,有時會忘記做到這一點,然後部署到生產。這真的很脆弱。

所以......任何人有更好的主意?

回答

0

嗯,這裏是我是如何解決這樣的:從API應用程序

  1. 下載揚鞭文件下載到本地硬盤。
  2. 將本地Swagger文件導入到Web應用程序中,以生成具有來自我的代碼而不是來自環境的命名的類。
  3. 使用AppSettings指定環境特定設置以指向API應用程序。這可以是web.config轉換,也可以在「應用程序設置」中的Web應用程序的Azure門戶中指定它們。
private readonly static Uri apiAppUrl = new Uri(CloudConfigurationManager.GetSetting("ApiAppUrl")); 
    private readonly static MyAppApi myAppApi = new MyAppApi(apiAppUrl); 

我還是很樂意的解決方案:

  • 使用接受URL構造指向API應用程序(這些都是在一流水平,因此靜態)實例化生成的API應用程序客戶端這並不需要下載Swagger文件,但總而言之,如果這是唯一必要的解決方法,那並不是那麼糟糕。

  • 0

    我不太確定你爲什麼要創建三個不同的應用程序,每個應用程序一個?一個應用程序很好,併爲每個環境使用web.config轉換。這是我做所有應用程序的一般方式,並且工作正常。

    有關如何應用web.config變換的信息可以找到here這可能有助於您的情況。

    希望有所幫助。

    +0

    對不起,如果這不清楚......我不創建三個不同的Visual Studio解決方案。我試圖將一個Visual Studio解決方案(包括一個Web應用程序和一個API應用程序)部署到三個不同的Azure應用程序服務實例 - Dev,Test和Prod - 並且來自AutoRest的命名使我失敗。 – Scott

    相關問題