建立可以在 Azure Logic Apps 中使用 HTTPS 端點來呼叫、觸發或建立巢狀的工作流程

適用於:Azure Logic Apps (使用量 + 標準)

有些案例可能會要求您建立可接收來自其他服務或工作流程的輸入要求邏輯應用程式工作流程,或您可以使用 URL 呼叫的工作流程。 針對此工作,當您使用下列任何要求型觸發程序類型時,可以在工作流程上公開原生同步 HTTPS 端點:

本指南示範如何藉由新增要求觸發程序,然後從另一個工作流程呼叫該端點,為您的工作流程建立可呼叫的端點。 所有原則都同樣適用可接收輸入要求的其他要求型觸發程序類型。

必要條件

  • Azure 帳戶和訂用帳戶。 如果您沒有訂用帳戶,請註冊一個免費的 Azure 帳戶

  • 您想要使用要求型觸發程序來建立可呼叫端點所在的邏輯應用程式工作流程。 您可以從空白工作流程或現有的工作流程 (在其中可取代目前的觸發程序) 開始。 此範例會從空白邏輯應用程式開始。

  • 若要測試您建立的可呼叫端點的 URL,您需要工具或應用程式,例如 Postman

建立可呼叫的端點

根據您有標準或使用量邏輯應用程式工作流程,遵循對應的步驟:

  1. Azure 入口網站中,於設計工具中開啟您的標準邏輯應用程式資源和空白工作流程。

  2. 遵循這些一般步驟,新增名為 [收到 HTTP 要求時]要求觸發程序

  3. 在 [要求本文 JSON 結構描述] 方塊中,您可以選擇性地輸入 JSON 結構描述,描述您預期觸發程序接收的承載或資料。

    設計工具會使用此結構描述來產生代表觸發程序輸出的權杖。 然後,您可以在邏輯應用程式的整個工作流程中輕鬆地參考這些輸出。 深入了解從 JSON 結構描述產生的權杖

    針對此範例,輸入下列結構描述:

    {
       "type": "object",
       "properties": {
          "address": {
             "type": "object",
             "properties": {
                "streetNumber": {
                   "type": "string"
                },
                "streetName": {
                   "type": "string"
                },
                "town": {
                   "type": "string"
                },
                "postalCode": {
                   "type": "string"
                }
             }
          }
       }
    }
    

    Screenshot shows Standard workflow with Request trigger and Request Body JSON Schema parameter with example schema.

    或者,您可以提供範例承載來產生 JSON 結構描述:

    1. 要求觸發程序中,選取 [使用範例承載來產生結構描述]

    2. 在 [輸入或貼上範例 JSON 承載] 方塊中,輸入您的範例承載,例如:

      {
         "address": {
            "streetNumber": "00000",
            "streetName": "AnyStreet",
            "town": "AnyTown",
            "postalCode": "11111-1111"
        }
      }
      
    3. 準備就緒後,選取 [完成]

      [要求本文 JSON 結構描述] 方塊現在會顯示產生的結構描述。

  4. 儲存您的工作流程您

    [HTTP POST URL] 方塊現在會顯示產生的回撥 URL,其他服務可以將其用來呼叫和觸發您的邏輯應用程式工作流程。 此 URL 包含查詢參數,其會指定用於驗證的共用存取簽章 (SAS) 金鑰。

    Screenshot shows Standard workflow, Request trigger, and generated callback URL for endpoint.

  5. 若要複製回撥 URL,您有下列選項:

    • 在 [HTTP POST URL] 方塊的右側,選取 [複製 URL] (複製檔案圖示)。

    • 從工作流程的 [概觀] 頁面複製回撥 URL。

      1. 在工作流程功能表上,選取 [概觀]

      2. 在 [概觀] 頁面上,於 [工作流程 URL] 底下,將指標移至 URL 上方,然後選取 [複製到剪貼簿]

        Screenshot shows Standard workflow and Overview page with workflow URL.

  6. 若要測試您現在擁有的要求觸發程序的回撥 URL,請使用 Postman 之類的工具或應用程式,並使用要求觸發程序預期的方法來傳送要求。

    此範例會使用 POST 方法:

    POST https://{logic-app-name}.azurewebsites.net:443/api/{workflow-name}/triggers/{trigger-name}/invoke?api-version=2022-05-01&sp=%2Ftriggers%2F{trigger-name}%2Frun&sv=1.0&sig={shared-access-signature}

選取預期的要求方法

根據預設,要求觸發程序會預期 POST 要求。 不過,您可以指定呼叫者必須使用的不同方法,但只能指定單一方法。

  1. 在要求觸發程序中,開啟 [進階參數] 清單,然後選取 [方法],將此屬性新增至觸發程序。

  2. 從 [方法] 清單中,改為選取觸發程序應該預期的方法。 或者,您可以指定自訂方法。

    例如,選取 GET 方法,以便您稍後測試 HTTP 端點的 URL。

透過端點 URL 傳遞參數

當想要透過端點的 URL 接受參數值時,您有下列選項:

  • 透過 GET 參數或 URL 參數接受值。

    這些值會當作端點 URL 中成對的名稱和數值傳遞。 針對此選項,您必須在要求觸發程序中使用 GET 方法。 在後續動作中,您可以在運算式中使用 triggerOutputs() 函式,取得參數值作為觸發程序輸出。

  • 透過要求觸發程序中參數的相對路徑接受值

    這些值會透過端點 URL 中的相對路徑傳遞。 您也需要明確地選取觸發程序預期的方法。 在後續動作中,您可以直接參考這些輸出,以取得參數值作為觸發程序輸出。

透過 GET 參數接受值

  1. 在要求觸發程序中,開啟 [新增參數]、將 Method 屬性新增至觸發程序,然後選取 GET 方法。

    如需詳細資訊,請參閱選取預期的要求方法

  2. 在設計工具中,遵循這些一般步驟,在您要使用參數值所在的位置新增動作

    針對此範例,選取名為 Response 的動作。

  3. 若要建置擷取參數值的 triggerOutputs() 運算式,請遵循下列步驟:

    1. 在 [回應] 動作中,選取 Body 屬性內部,使得動態內容 (閃電圖示) 和運算式編輯器 (公式圖示) 的選項顯示。 選取公式圖示以開啟運算式編輯器。

    2. 在運算式方塊中,輸入下列運算式,將 parameter-name 取代為您的參數名稱,然後選取 [確定]

      triggerOutputs()['queries']['parameter-name']

      Screenshot shows Standard workflow, Response action, and the triggerOutputs() expression.

      Body 屬性中,運算式會解析為 triggerOutputs() 權杖。

      Screenshot shows Standard workflow with Response action's resolved triggerOutputs() expression.

      如果您儲存工作流程、離開設計工具並返回設計工具,權杖會顯示您指定的參數名稱,例如:

      Screenshot shows Standard workflow with Response action's resolved expression for parameter name.

      在程式碼檢視中,Body 屬性會出現在回應動作的定義中,如下所示:

      "body": "@{triggerOutputs()['queries']['parameter-name']}",

      例如,假設您想要針對名為 postalCode 的參數傳遞一值。 Body 屬性會指定具有尾端空格的字串 Postal Code: ,後面接著對應的運算式:

      Screenshot shows Standard workflow with Response action and example triggerOutputs() expression.

測試可呼叫的端點

  1. 從要求觸發程序,複製工作流程 URL,然後將 URL 貼到另一個瀏覽器視窗中。 在 URL 中,以下列格式將參數名稱和值新增至 URL,然後按 Enter。

    ...invoke/{parameter-name}/{parameter-value}?api-version=2022-05-01...

    例如:

    https://mystandardlogicapp.azurewebsites.net/api/Stateful-Workflow/triggers/When_a_HTTP_request_is_received/invoke/address/12345?api-version=2022-05-01&sp=%2Ftriggers%2FWhen_a_HTTP_request_is_received%2Frun&sv=1.0&sig={shared-access-signature}

    瀏覽器會傳回具有下列文字的回應:Postal Code: 123456

    Screenshot shows browser with Standard workflow response from request to callback URL.

注意

如果您想要在 URI 中包含井字號 (#),請改用此編碼版本:%25%23

透過相對路徑接受值

  1. 在要求觸發程序中,開啟 [進階參數] 清單,然後選取 [相對路徑],將此屬性新增至觸發程序。

    Screenshot shows Standard workflow, Request trigger, and added property named Relative path.

  2. Relative path 屬性中,指定 JSON 結構描述中參數的相對路徑,您想要 URL 接受該相對路徑,例如,/address/{postalCode}

    Screenshot shows Standard workflow, Request trigger, and Relative path parameter value.

  3. 在要求觸發程序底下,遵循這些一般步驟,在您要使用參數值所在的位置新增動作

    針對此範例,新增 [回應] 動作。

  4. 在回應動作的 Body 屬性中,包括代表觸發程序相對路徑中所指定參數的權杖。

    例如,假設您想要回應動作傳回 Postal Code: {postalCode}

    1. Body 屬性中,輸入具有尾端空格的 Postal Code: 。 將游標保留在編輯方塊內,讓動態內容清單保持開啟狀態。

    2. 在動態內容清單中,從 [收到 HTTP 要求時] 區段,選取 [路徑參數 postalCode] 觸發程序輸出。

      Screenshot shows Standard workflow, Response action, and specified trigger output to include in response body.

      Body 屬性現在包含選取的參數:

      Screenshot shows Standard workflow and example response body with parameter.

  5. 儲存您的工作流程您

    在要求觸發程序中,回撥 URL 已更新,現在包含相對路徑,例如:

    https://mystandardlogicapp.azurewebsites.net/api/Stateful-Workflow/triggers/When_a_HTTP_request_is_received/invoke/address/%7BpostalCode%7D?api-version=2022-05-01&sp=%2Ftriggers%2FWhen_a_HTTP_request_is_received%2Frun&sv=1.0&sig={shared-access-signature}

  6. 若要測試可呼叫的端點,請從要求觸發程序複製更新的回撥 URL、將 URL 貼入另一個瀏覽器視窗中、將 URL 中的 %7BpostalCode%7D 取代為 123456,然後按 Enter。

    瀏覽器會傳回具有下列文字的回應:Postal Code: 123456

    Screenshot shows browser with Standard workflow response from request to callback URL.

注意

如果您想要在 URI 中包含井字號 (#),請改用此編碼版本:%25%23

透過端點 URL 呼叫工作流程

在建立端點之後,您可以將 HTTPS 要求傳送至端點的完整 URL,來觸發工作流程。 Azure Logic Apps 工作流程對於直接存取端點具有內建支援。

從結構描述產生的權杖

在要求觸發程序中提供 JSON 結構描述時,工作流程設計工具會產生該結構描述中屬性的權杖。 然後您可以使用這些權杖,透過工作流程來傳遞資料。

例如,如果您將更多屬性 (例如 "suite") 新增至 JSON 結構描述,則這些屬性的權杖可供您在工作流程的後續步驟中使用。 以下是完整 JSON 結構描述:

{
   "type": "object",
   "properties": {
      "address": {
         "type": "object",
         "properties": {
            "streetNumber": {
               "type": "string"
            },
            "streetName": {
               "type": "string"
            },
            "suite": {
               "type": "string"
            },
            "town": {
               "type": "string"
            },
            "postalCode": {
               "type": "string"
            }
         }
      }
   }
}

呼叫其他工作流程

您可以藉由將要求巢狀置於目前的工作流程內,呼叫可接收要求的其他工作流程。 若要呼叫這些工作流程,請遵循下列步驟:

  1. 在設計工具中,遵循這些一般步驟,新增名為叫用此工作流程應用程式中的工作流程工作流程作業動作

    [工作流程名稱] 清單會顯示可供您選取的合格工作流程。

  2. 從 [工作流程名稱] 清單中,選取您想要呼叫的工作流程,例如:

    Screenshot shows Standard workflow, action named Invoke a workflow in this workflow app, opened Workflow Name list, and available workflows to call.

參考來自輸入要求的內容

如果傳入要求的內容類型是 application/json,您可以在傳入要求中參考屬性。 否則,會將此內容視為可傳遞給其他 API 的單一二進位單位。 若要在邏輯應用程式的工作流程內參考此內容,您必須先轉換該內容。

例如,如果您要傳遞具有 application/xml 類型的內容,則可以使用 @xpath() 運算式來執行 XPath 擷取,或使用 @json() 運算式將 XML 轉換成 JSON。 深入了解如何使用支援的 內容類型

若要取得傳入要求的輸出,您可以使用 @triggerOutputs 運算式。 例如,假設您有看起來像此範例的輸出:

{
   "headers": {
      "content-type" : "application/json"
   },
   "body": {
      "myProperty" : "property value"
   }
}

若要特別地存取 body 屬性,您可以使用 @triggerBody() 運算式 作為捷徑。

回應要求

有時候您想要將內容傳回給呼叫者,以回應觸發工作流程的特定要求。 若要建構回應的狀態碼、標頭和本文,請使用回應動作。 這個動作可以出現在工作流程的任何位置,而不只是工作流程的結尾。 如果工作流程未包括回應動作,則端點會立即回應 [202 已接受] 狀態。

為了讓原始呼叫者成功取得回應,除非呼叫觸發的工作流程作為巢狀工作流程,否則回應的所有必要步驟都必須在要求逾時限制內完成。 如果未在此限制內傳回任何回應,傳入要求就會逾時,並收到 [408 用戶端逾時] 回應。

針對巢狀工作流程,無論需要多少時間,父工作流程都會繼續等候回應,直到所有步驟完成為止。

建構回應

在回應本文中,您可以包含多個標頭和任何類型的內容。 例如,根據本主題稍早針對要求觸發程序所述的 JSON 結構描述,下列回應的標頭會指定回應的內容類型是 application/json,而且本文包含 townpostalCode 屬性的值。

Screenshot shows Response action and response content type.

回應具有下列屬性:

屬性 (顯示) Property (JSON) 描述
狀態碼 statusCode 要用於傳入要求回應中的 HTTPS 狀態碼。 此代碼可以是任何以 2xx、4xx 或 5xx 開頭的有效狀態碼。 但是,不允許 3xx 狀態碼。
標題 headers 要包含在回應中的一個或多個標頭
本文 body 本文物件可以是字串、JSON 物件,甚至是上一個步驟中所參考的二進位內容

若要檢視回應動作的 JSON 定義和工作流程的完整 JSON 定義,請從設計工具檢視變更為程式碼檢視。

"Response": {
   "type": "Response",
   "kind": "http",
   "inputs": {
      "body": {
         "postalCode": "@triggerBody()?['address']?['postalCode']",
         "town": "@triggerBody()?['address']?['town']"
      },
      "headers": {
         "content-type": "application/json"
      },
      "statusCode": 200
   },
   "runAfter": {}
}

問與答

問:輸入呼叫的 URL 安全性如何?

:Azure 會使用共用存取簽章 (SAS),安全地產生邏輯應用程式回撥 URL。 這個簽章是以查詢參數的形式傳遞,且必須在您的工作流程可以執行之前先驗證。 Azure 會使用每個邏輯應用程式、觸發程序名稱以及要執行作業之秘密金鑰的唯一組合來產生簽章。 因此,除非某人具有邏輯應用程式祕密金鑰的存取權,否則他們無法產生有效的簽章。

重要

對於生產系統和更高的安全系統,基於下列原因,強烈建議直接從瀏覽器呼叫工作流程:

  • URL 中出現共用存取金鑰。
  • 由於邏輯應用程式客戶之間共用網域,因此您無法管理安全內容原則。

如需針對您的工作流程的輸入呼叫的安全性、授權和加密的詳細資訊,例如傳輸層安全性 (TLS) (先前稱為安全通訊端層 (SSL))、Microsoft Entra ID Open Authentication (Microsoft Entra ID OAuth),使用 Azure API 管理公開您的邏輯應用程式工作流程,或限制產生輸入呼叫的 IP 位址,請參閱安全存取和資料 - 存取要求型觸發程序的輸入呼叫

問︰我可以進一步設定可呼叫的端點嗎?

︰可以,HTTPS 端點透過 Azure API 管理來支援更進階的設定。 此服務也可讓您透過一致的方式管理所有 API,包括邏輯應用程式、設定自訂網域名稱、使用其他驗證方法等等,例如︰

下一步