練習 - 將另一個 Azure Functions 應用程式新增至現有的 API
您應該記得,您想要將所有個別微服務 (皆為 Azure Functions) 整合成單一 API。 您已將 Products 函數應用程式新增至 API 管理的新執行個體。 現在您要將另一個函數應用程式新增至該 API。
在此練習中,您會將 Orders 函數應用程式新增至 API,並使用 curl
工具來測試整合系統。
測試 OrderDetails 函式
在我們將 Orders 函式應用程式新增至 API 之前,讓我們先測試它所裝載的 OrderDetails 函式。
在 Azure 資源功能表或 [首頁] 上,選取 [所有資源]。 [所有資源] 窗格會隨即出現。
依 [類型] 排序資源,然後選取名稱開頭為 OrderFunction 的函數應用程式。 OrderFunction 函數應用程式的 [概觀] 窗格隨即出現。
從函數應用程式的函式清單中,選取 [OrderDetails]。 [OrderDetails 函式概觀] 窗格隨即出現。
在 [訂單詳細資料] 選單的 [開發人員] 下,選取 [程式碼 + 測試]。 OrderDetails 函式的 [程式碼 + 測試] 窗格隨即出現,顯示
function.json
檔案的內容。在命令列上,選取 [測試/執行]。 OrderDetails 函式的 [輸入] 參數索引標籤隨即出現。
在 [HTTP 方法] 欄位中,從下拉式清單中選取 [GET],在 [查詢] 底下選取 [新增參數],然後在 [名稱] 欄位中輸入名稱,並在 [值] 欄位中,輸入「Chiba」,然後選取 [執行]。
記錄主控台隨即開啟,並顯示要求的狀態。 [輸出] 索引標籤會顯示 HTTP 回應碼和 JSON 格式內容。
您可以選擇性地使用名稱值 Henri 和 Barriclough 來執行更多要求,以取得不同的客戶訂單。
選取 [關閉] 以關閉 [測試/執行] 的 [輸入]/[輸出] 索引標籤。
在 [OrderDetails] 窗格的命令列上,選取 [取得函式 URL]。 請注意,URL 是在 azurewebsites.net 網域中的函式名稱。
將函式新增至現有的 API
在此步驟中,我們會將 Order 函式新增至我們在上一個練習中建立的 API 管理資源。 在該練習中使用過函數應用程式介面中的 API 管理介面。 這次會透過 Azure 入口網站資源功能表導覽至 API 管理執行個體,以示範這兩種方法都可供使用。
在 Azure 資源功能表或 [首頁] 上,選取 [所有資源]。 [所有資源] 窗格會隨即出現。
依 [類型] 排序資源,然後選取 OnlineStore API 管理服務。 OnlineStore 的 API 管理服務隨即出現。
在功能表的 [API] 下選取 [API]。 [API] 窗格會顯示定義新 API 的選項。
在 [從 Azure 資源建立] 下,選取 [函數應用程式]。
[從函數應用程式建立] 對話方塊會隨即出現。
若要選取函數應用程式,請選取 [瀏覽]。 [匯入 Azure Functions] 窗格會隨即出現。
在 [設定必要設定] 欄位上,選取 [選取]。
(../media/5-import-azure-function-app-03-expanded.png#lightbox)
[選取 Azure 函數應用程式] 窗格隨即出現。
選取 [OrderFunction],然後選取 [選取]。 [匯入 Azure Functions] 窗格會重新出現,包含已設定的 OrderDetails 函數應用程式。
確定已勾選 [OrderDetails],然後在頁面底部選取 [選取] 以新增函式。 [從函數應用程式建立] 對話方塊會隨即出現。
以 orders 取代 [API URL 尾碼]欄位中的值。 請注意此變更會如何更新基底 URL。 選取 [建立] 以建立您的 API。
OnlineStore API 管理服務會顯示 [設計] 索引標籤,其中包含 OrderDetails 的所有可用 (GET、POST) API。
在入口網站中測試 OnlineStore 訂單端點
既然已將 OrderDetails 新增至我們的 API,讓我們使用 Azure 入口網站中的 API 管理工具加以測試。
在 OrderFunctionNNNN API 設計索引標籤的所有作業底下,選取 [取得 OrderDetails],然後選取 [測試] 索引標籤。
在 [查詢參數] 區段中,選取 [新增參數],然後分別在 [名稱] 欄位和 [Chiba] 和 [VALUE] 欄位中輸入「名稱」。 請選取傳送。
[HTTP 回應訊息] 索引標籤會顯示 HTTP 要求成功 (HTTP/1.1/ 200 OK)、顯示訂單識別碼的 JSON 物件、訂單總價及出貨狀態。
向上捲動至 [HTTP 要求] 區段;請注意,要求已傳送至 azure-api.net 網域內的子網域和子目錄。 該位置與 azurewebsites.net 主機網域不同。
測試已合併 API
我們可以使用 curl
命令列工具,將要求提交至我們的 API。 cURL 非常理想,因為可以在要求中包含正確的訂閱金鑰。 要求也需要 API 的位置,該 API 裝載在 Azure API 管理中,而且在此情況下包含 Products 和 Orders 函式。
在 Azure 資源功能表或 [首頁] 上選取 [所有資源]。
依類型排序資源,然後選取 [OnlineStore] API 管理服務。 OnlineStore 的 API 管理服務隨即出現。
在 [基本資訊] 區段中,將滑鼠停留在 [閘道 URL] 上方,然後選取 [複製到剪貼簿] 圖示。
在右側的 Azure Cloud Shell 中,讓我們來定義一些變數。 執行下列命令,將預留位置
<paste URL here>
取代為您複製到剪貼簿的 URL 值,然後按 [輸入]。 此值會定義閘道變數。GATEWAY_URL=<paste URL here>
在 Azure 的 [OnlineStore API 管理服務] 功能表上,向下捲動至 [API],然後選取 [訂閱]。 OnlineStore API 管理執行個體的 [訂閱] 窗格隨即出現。
選取 [Built-in all-access subscription]\(內建的所有存取訂閱\) 資料列最右邊的省略號 …,然後從操作功能表中選取 [顯示/隱藏索引鍵]。 API 的主索引鍵和次要索引鍵隨即出現。
在 [主索引鍵] 欄位的右側選取 [複製到剪貼簿] 圖示。
在 Cloud Shell 中執行下列命令,將預留位置取代為剪貼簿中的值,然後按 [輸入]。
SUB_KEY=<paste key here>
現在可以查詢相同的 API 管理服務,要求訂單和產品的詳細資料:
若要請求名為 Henri 的客戶詳細資料,請在 Cloud Shell 中執行以下命令:
curl -X GET "$GATEWAY_URL/orders/OrderDetails?name=Henri" -H "Ocp-Apim-Subscription-Key:$SUB_KEY"
此回應包含一個 JSON 程式碼區塊,其中的訂單詳細資料顯示訂單 56224 已出貨給 Pascale Henri。 若要取得不同結果,您也可以使用名稱 Chiba 與 Barriclough 來嘗試該命令。
若要要求產品識別碼為 2 的詳細資料,請在 Cloud Shell 中執行下列命令:
curl -X GET "$GATEWAY_URL/products/ProductDetails?id=2" -H "Ocp-Apim-Subscription-Key:$SUB_KEY"
回應包含 JSON 程式碼區塊,其中包含產品的詳細資料。 若要取得不同結果,您也可以嘗試使用識別碼值為 1 和 3 的命令。
請注意,現在這兩個函式可以透過 azure-api.net 網域中的端點來呼叫 (由 GATEWAY_URL 定義),該網域是 Azure API 管理所使用的網域。 在其他學習課程模組中,您可以了解如何將原則、安全性設定、外部快取與其他功能套用至 API 管理閘道中的函式。 閘道提供中央控制點,您可以在該處管理多個微服務,而不需要改變其程式碼。