初體驗和實驗 Azure API Management for WSDL

初體驗和實驗 Azure API Management for WSDL

前言

Azure API Management 簡單來說是可以管理自已公司各種對內、對外的機制,重點是還有各種統計分析資料可以讓開發團隊和管理階層知道那些 API 是比較多人使用,可以讓團隊知道應該把心力放在那裡。 微笑 

image

視覺化的分析資料以及 Configuration 的方式可以統合各種不同的 WEB API  當然不單單只是轉址這麼簡單,連路徑格式和名稱都可以重新調整這才是真正強悍的地方

 

若是對 API Management 有進一步興趣的話可以參考這個影片 微笑 

http://azure.microsoft.com/en-us/documentation/services/api-management/

 

另外還有一個很重要的部分就是可以直接當做文件,UT、文件、API 都直接整合在一個地方 相當方便

image

 

由於影片中的範例已經非常地清楚,而且也說明不支援 WSDL ,但我還是希望可以驗證一下 API Mamangement 可以整合到什麼地步

所以以下的做法只能當做參考,我只是將自已實驗的過程記錄下來

 

建立 API Management 服務

API 的來源這裡不是用 Web API ,而是使用現有的 Cloud Service 的 Web Service ( WSDL )

 

建立好 API Management 直接選擇 「管理主控台」以便設定 EasyDrink API 的清單

image

管理 API

 

image

要注意的是 URL 的部分,若是 WSDL 的話只要前面的名稱即可。

http://easydrink.cloudapp.net/easydrinkwebservice.asmx?op=GetProductVoteTop10

而 suffix 的部分則是API Management 的第一層分類

 

基本上跟 Web API 的用法都一模一樣

 

接下來要設定 WSDL 的 Method 那些要加入

 

image

這裡特別將 舊式的 URL 路徑

http://easydrink.cloudapp.net/easydrinkwebservice.asmx?op=GetProductVoteTop10

變更成新式 WEB API 格式

Http://Easydrink.azure-api.net/easydrink/GetProductVoteTop10

 

image

另外可以在  Parameters 、Body 和 Response 加上文件說明,這樣子日後其他人要使用的話就知道應該要傳什麼資料

image

最後應該會是這樣子的方式呈現

 

image

設定完成後選擇剛剛加入的清單

 

設定 API Products

image

接下來就要設定每一個服務的對外統一名稱,系統會自動內建 Starter 和 Unlimited 。

 

image

這裡重新建立了新的 Product 取名為 Public

 

image

基本上這樣子可以設定那些群組的人可以存取,這裡區分了 Admin , Dev , Guest

image

加入剛剛設定好的 API

 

image

Echo API 也是 系統預設的,不喜歡的話可以直接刪除。

 

image

確定無誤後記得按上面的 Publish 這樣子才可以正式對外公開使用

 

image

 

 

image

這樣代表已經全部完成了

 

到 Developer Portal 測試 API

目前為止都沒有特別處理什麼,只是簡單的轉址和轉換格式而已。產出的內容都會是跟原本的 WSDL 一模一樣。

image

API Management 並不是單純轉址,還提供了 Portal 可以讓我們直接在網頁上進行 API 驗證

 

image

進到我們剛剛新增的頁面後可以看到測試畫面了

 

大家都知道 WSDL 是用 POST 的方式將 Request Header 和 Body 的 SOAP 資訊送到 Server 上後再處理,因為以前沒有 URL Router 的概念所以都是透過 Body 來判讀

 

因此這裡分別將 Http Request Header


SOAPAction: http://tempuri.org/GetProductVoteTop10

 

和 Request Body 分別代入

 

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <GetProductVoteTop10 xmlns="http://tempuri.org/" />
  </soap:Body>
</soap:Envelope>

 

POST 送出!

image

YES  正確地出現 200

image

而且有將原本的資料回傳出來

 

透過 Policies 將 XML轉換成 JSON

 

當然現在輸出 XML 都會被嫌胖,那轉換成 JSON 又要改程式。是不是有什麼方式可以讓前端 Device 可以改用 JSON 的方式接收呢?JavaScript 可以吃 長度還可以節省。

那麼就當然要透過 API Management 的 Policy 來處理了

image

選擇好 Operation 之後可以修改 Inbound 和 outbound 的設定 ,有興趣的朋友可以參考 MSDN 的說明 微笑 

這裡用了兩種其中一個是 Request Header 自動幫我代入 SOAPAction ,另外一個則是 XML to JSON 的項目。只要從右邊點選就會自動帶進來了不用自已打。

 

以下是供參考

 

<policies>
    <inbound>
        <set-header name="SOAPAction" exists-action="override">
            <value>http://tempuri.org/GetProductVoteTop10</value>
            <!-- for multiple headers with the same name add additional value elements -->
        </set-header>
        <base />
        <rewrite-uri template="/easydrinkwebservice.asmx" />
    </inbound>
    <outbound>
        <base />
        <xml-to-json kind="javascript-friendly" apply="always" consider-accept-header="false" />
    </outbound>
</policies>

 

 

重新驗證後可以看到,我這次只有代入 Request Body 的 SOAP 資訊。上面的 Request Header 就不需要再輸入了 ( 清空也沒有問題 )

image

OK 回應正常

 

image

 

而且輸出的格式也一併幫我更換成 JSON 語法

不過還是要再提醒大家,由於目前 API Management 目前本來就沒有支援 WSDL 所以這個是正常的。但從這裡可以看到只要符合 HTTP 機制也是沒有問題的 微笑 

這樣子無論是對外營運收費,還是內部使用要整合散落在各地的 API 就可以考慮不用自已寫,而是可以用 API Management 來整合這些所有的工作。

 

完全不用寫一行程式,也不用改原來的服務是不是讓我們的工作又減輕很多了呢? 微笑