2016-03-04 76 views
2

我已經導入了我的swagger模式,並且管理服務已經構建了我的API的所有文檔。我現在做了更改並重新部署了更改。我是否已將API從API管理中移除並重新導入,或者是否有「更新」現有API的方法?Azure API管理 - 更新Swagger模式

回答

4

好吧,我會盡我的責任給人類,並告訴你真正的方式來做到這一點。我的意思是,讓我們面對現實世界中的任何人都不會繼續點擊門戶來刷新其API的更改。每個人都希望自動執行這個煩人的手動任務。

所以我寫了這個我們目前在生產中使用的Powershell腳本。這會讓你確定。

前提條件:您需要服務主體才能夠自動登錄。 I used this guide to do that.

param(
[String]$pass, 
[String]$swaggerUrl, 
[String]$apiId, 
[String]$apiName, 
[String]$apiServiceUrl 
) 
Try 
{ 
    $azureAccountName = "[YOUR AZURE AD APPLICATION ID FOR THE SERVICE PRINCIPAL]" 
    $azurePassword = ConvertTo-SecureString $pass -AsPlainText -Force 
    $psCred = New-Object System.Management.Automation.PSCredential($azureAccountName, $azurePassword) 
    Add-AzureRmAccount -Credential $psCred -TenantId "[YOUR AZURE TENANT ID]" -ServicePrincipal 

    $azcontext = New-AzureRmApiManagementContext -ResourceGroupName "[YOUR RESOURCE GROUP NAME]" -ServiceName "[THE NAME OF YOUR API MANAGEMENT INSTANCE]" 
    Import-AzureRmApiManagementApi -Context $azcontext -SpecificationFormat "Swagger" -SpecificationUrl $swaggerUrl -ApiId $apiId 
    Set-AzureRmApiManagementApi -Context $azcontext -ApiId $apiId -ServiceUrl $apiServiceUrl -Protocols @("https") -Name $apiName 
} 
Catch 
{ 
    Write-Host "FAILURE! An error occurred!!! Aborting script..." 
    exit 
} 

很明顯,您需要替換上面的括號內的字符串。該參數的說明:

「通行證」:您的服務主體的密碼

「swaggerUrl」:在您的應用程序的招搖JSON文件的路徑

「apiId」:從您的API管理實例這個值,它會在門戶網站的儀表盤顯示,如果你檢查現有的API

「apiName」:無論你需要將其命名

「apiServiceUrl」:你的API的Azure的應用服務URL(或其它地方ÿ我們的API是)

+1

我改變了我接受的答案給你:) –

4

沒關係,事實證明你只是告訴導入它的一個現有的API,它會更新。我擔心我最終會收到一條錯誤消息,說明'操作已經存在'。

+0

如果您經常更新您的API,例如持續部署您的API,有什麼方法可以自動執行此操作? – starmandeluxe

+0

好問題,我確信有一種方法可以通過Azure API或CLI或PowerShell來完成,但我從來沒有走過這條路。 –

+0

我肯定會欣賞一個PowerShell的界面,但我沒有看到任何檢查文檔後,但我沒有看太多。這真的很需要。 – starmandeluxe