共用方式為


在 Azure Functions 中自定義 HTTP 端點

在本文中,您將瞭解 Azure Functions 如何讓您建置可高度擴充的 API。 Azure Functions 隨附內建的 HTTP 觸發程式和系結集合,可讓您輕鬆地以各種語言撰寫端點,包括Node.js、C# 等等。 在本文中,您將自定義 HTTP 觸發程式來處理 API 設計中的特定動作。 您也將準備將 API 與 Azure Functions Proxy 整合,並設定模擬 API,以準備成長 API。 這些工作是在 Functions 無伺服器計算環境之上完成的,因此您不必擔心調整資源,而只需專注於 API 邏輯。

重要

Azure Functions Proxy 是 Azure Functions 執行階段 1.x 版到 3.x 版的舊版功能。 可以在 4.x 版中重新啟用對 Proxy 的支援,以便您成功將函數應用程式升級至最新的執行階段版本。 您應儘快切換為將函數應用程式與 Azure API 管理整合。 APIM 可讓您利用一組更完整的功能,來定義、保護、管理以 Functions 為基礎的 API 並從中獲利。 如需詳細資訊,請參閱 API 管理整合

若要了解如何在 Functions 4.x 版中重新啟用 Proxy 支援,請參閱在 Functions 第 4.x 版中重新啟用 Proxy

必要條件

本主題使用 作為從 Azure 入口網站 建立第一個函式中所建立資源的起點。 如果您尚未這麼做,請立即完成這些步驟以建立您的函式應用程式。

產生的函式將用於本文的其餘部分。

登入 Azure

使用您的 Azure 帳戶登入 Azure 入口網站

自訂 HTTP 函式

根據預設,您的 HTTP 觸發程式函式會設定為接受任何 HTTP 方法。 您也可以使用預設網址 https://<yourapp>.azurewebsites.net/api/<funcname>?code=<functionkey>。 在本節中,您會修改 函式,以僅使用 /api/hello回應 GET 要求。

  1. 流覽至 Azure 入口網站 中的函式。 選取左側功能表中的 [整合],然後選取 [觸發程式] 底下的 [HTTP[req]。

    自訂 HTTP 函式

  2. 使用下表中指定的 HTTP 觸發程式設定。

    欄位 範例值 描述
    路由範本 hello 決定用來叫用此函式的路由
    授權等級 匿名 選擇性:讓您的函式在沒有 API 金鑰的情況下存取
    選取的 HTTP 方法 GET 只允許選取的 HTTP 方法用來叫用此函式

    您未在 /api 路由範本中包含基底路徑前置詞,因為它是由全域設定所處理。

  3. 選取 [儲存]。

如需自定義 HTTP 函式的詳細資訊,請參閱 Azure Functions HTTP 系結

測試您的 API

接下來,測試您的函式,以瞭解其如何與新的 API 介面搭配運作:

  1. 在函式頁面上,從左側功能表中選取 [程序代碼 + 測試 ]。

  2. 從頂端功能表中選取 [取得函式 URL ],然後複製 URL。 確認它現在使用 /api/hello 路徑。

  3. 將 URL 複製到新的瀏覽器索引標籤或您慣用的 REST 用戶端。

    瀏覽器預設會使用 GET。

  4. 將參數新增至 URL 中的查詢字串。

    例如: /api/hello/?name=John

  5. 按 Enter 以確認其運作正常。 您應該會看到回應「Hello John」。

  6. 您也可以嘗試使用另一個 HTTP 方法呼叫端點,以確認函式未執行。 若要這樣做,請使用 REST 用戶端,例如 cURL、Postman 或 Fiddler。

Proxy 概觀

在下一節中,您將透過 Proxy 呈現 API。 Azure Functions Proxy 可讓您將要求轉送至其他資源。 您可以定義 HTTP 端點,就像使用 HTTP 觸發程式一樣。 不過,您不需要撰寫程式代碼以在呼叫該端點時執行,而是提供遠端實作的 URL。 這麼做可讓您將多個 API 來源撰寫成單一 API 介面,這可供用戶端取用,如果您想要將 API 建置為微服務,這會很有用。

Proxy 可以指向任何 HTTP 資源,例如:

若要深入瞭解 Proxy,請參閱 使用 Azure Functions Proxy

注意

Proxy 可在 Azure Functions 1.x 版至 3.x 中使用。

建立您的第一個 Proxy

在本節中,您會建立新的 Proxy,以作為整體 API 的前端。

設定前端環境

重複建立函式應用程式的步驟,以建立您要在其中建立 Proxy 的新函式應用程式。 這個新應用程式的 URL 可作為 API 的前端,而您先前編輯的函式應用程式會做為後端。

  1. 在入口網站中流覽至新的前端函式應用程式。

  2. 選取 [組態],然後選擇 [應用程式 設定]。

  3. 向下卷動至 [應用程式設定],其中儲存索引鍵/值組,並使用機碼 HELLO_HOST建立新的設定。 將設定為後端函式應用程式的主機, 例如 <YourBackendApp>.azurewebsites.net。 此值是您稍早測試 HTTP 函式時複製的 URL 的一部分。 您稍後會在組態中參考此設定。

    注意

    建議針對主機組態使用應用程式設定,以防止 Proxy 的硬式編碼環境相依性。 使用應用程式設定表示您可以在環境之間移動 Proxy 組態,並套用環境特定的應用程式設定。

  4. 選取 [儲存]。

在前端建立 Proxy

  1. 在入口網站中流覽回您的前端函式應用程式。

  2. 在左側功能表中,選取 [Proxy],然後選取 [ 新增]。

  3. 在 [ 新增 Proxy] 頁面上,使用下表中的設定,然後選取 [ 建立]。

    欄位 範例值 描述
    Name HelloProxy 僅用於管理的易記名稱
    路由範本 /api/remotehello 決定用來叫用此 Proxy 的路由
    後端URL https://%HELLO_HOST%/api/hello 指定要求應代理的端點

    建立 Proxy

    Azure Functions Proxy 不提供 /api 必須包含在路由範本中的基底路徑前置詞。 語法 %HELLO_HOST% 會參考您稍早建立的應用程式設定。 解析的 URL 會指向原始函式。

  4. 複製 Proxy URL 並在瀏覽器中或使用您慣用的 HTTP 用戶端進行測試,以試用您的新 Proxy:

    • 對於匿名函式,請使用: https://YOURPROXYAPP.azurewebsites.net/api/remotehello?name="Proxies"
    • 對於具有授權用途的函式: https://YOURPROXYAPP.azurewebsites.net/api/remotehello?code=YOURCODE&name="Proxies"

建立模擬 API

接下來,您將使用 Proxy 為您的解決方案建立模擬 API。 此 Proxy 可讓客戶端開發進行,而不需要完全實作後端。 稍後在開發中,您可以建立新的函式應用程式,其支援此邏輯,並將 Proxy 重新導向至該函式應用程式。

若要建立此模擬 API,我們將這次使用 App Service 編輯器建立新的 Proxy。 若要開始使用,請在入口網站中流覽至您的函式應用程式。 選取 [平臺功能],然後在 [開發工具] 底下尋找 [App Service 編輯器]。 App Service 編輯器會在新的索引標籤中開啟。

在左側導覽中選取 proxies.json 。 此檔案會儲存所有 Proxy 的組態。 如果您使用其中 一個 Functions 部署方法,請在原始檔控制中維護此檔案。 若要深入瞭解此檔案,請參閱 Proxy 進階設定

如果您到目前為止一直跟著,您的proxies.json看起來應該如下所示:

{
    "$schema": "http://json.schemastore.org/proxies",
    "proxies": {
        "HelloProxy": {
            "matchCondition": {
                "route": "/api/remotehello"
            },
            "backendUri": "https://%HELLO_HOST%/api/hello"
        }
    }
}

接下來,您將新增模擬 API。 使用下列程式代碼取代您的proxies.json檔案:

{
    "$schema": "http://json.schemastore.org/proxies",
    "proxies": {
        "HelloProxy": {
            "matchCondition": {
                "route": "/api/remotehello"
            },
            "backendUri": "https://%HELLO_HOST%/api/hello"
        },
        "GetUserByName" : {
            "matchCondition": {
                "methods": [ "GET" ],
                "route": "/api/users/{username}"
            },
            "responseOverrides": {
                "response.statusCode": "200",
                "response.headers.Content-Type" : "application/json",
                "response.body": {
                    "name": "{username}",
                    "description": "Awesome developer and master of serverless APIs",
                    "skills": [
                        "Serverless",
                        "APIs",
                        "Azure",
                        "Cloud"
                    ]
                }
            }
        }
    }
}

此程式代碼會新增不含 屬性的新 ProxyGetUserByNamebackendUri。 它不使用呼叫另一個資源,而是使用回應覆寫修改 Proxy 的默認回應。 要求和回應覆寫也可以與後端URL搭配使用。 當 Proxy 到舊版系統時,這項技術很有用,您可能需要修改標頭、查詢參數等等。 若要深入瞭解要求和回應覆寫,請參閱 修改 Proxy 中的要求和回應。

使用瀏覽器或您慣用的 REST 用戶端呼叫端點, <YourProxyApp>.azurewebsites.net/api/users/{username} 以測試模擬 API。 請務必將 {username} 取代為代表用戶名稱的字串值。

下一步

在本文中,您已瞭解如何在 Azure Functions 上建置和自定義 API。 您也瞭解如何將多個 API,包括模擬結合為統一 API 介面。 您可以使用這些技術,在 Azure Functions 提供的無伺服器計算模型上執行時,建置任何複雜性的 API。

當您進一步開發 API 時,下列參考可能會很有説明: