適用範圍:Azure Logic Apps(消耗 + 標準)
有些案例可能會要求您建立可接收來自其他服務或工作流程的輸入要求邏輯應用程式工作流程,或您可以使用 URL 呼叫的工作流程。 針對此工作,當您使用下列任何要求型觸發程序類型時,可以在工作流程上公開原生同步 HTTPS 端點:
- 請求
- HTTP Webhook
- 具有 ApiConnectionWebhook 類型的 受控連接器觸發程式,而且可以接收輸入 HTTPS 要求
本指南示範如何藉由新增 要求 觸發程式,然後從另一個工作流程呼叫該端點,為您的工作流程建立可呼叫的端點。 所有原則都同樣適用可接收輸入要求的其他要求型觸發程序類型。
必要條件
Azure 帳戶和訂用帳戶。 如果您沒有訂用 帳戶,請註冊免費的 Azure 帳戶。
您希望使用 Request 觸發程式來建立可呼叫端點的邏輯應用工作流程。 您可以從空白工作流程或現有的工作流程 (在其中可取代目前的觸發程序) 開始。 此範例會從空白邏輯應用程式開始。
安裝或使用可傳送 HTTP 要求以測試解決方案的工具,例如:
- Visual Studio Code 搭配 Visual Studio Marketplace 的擴充功能
- PowerShell Invoke-RestMethod
- Microsoft Edge - 網路控制台工具
- 布魯諾
- 捲曲
警告
針對您有敏感數據的案例,例如認證、秘密、存取令牌、API 密鑰和其他類似資訊,請務必使用一個工具,以必要的安全性功能保護您的數據。 此工具應該離線或本機運作,且不需要登入線上帳戶或將數據同步處理至雲端。 當您使用具有這些特性的工具時,可以降低公開敏感數據給公眾的風險。
建立可呼叫的端點
根據您有標準或使用量邏輯應用程式工作流程,遵循對應的步驟:
在 Azure 入口網站中,開啟您的標準邏輯應用程式資源,並在設計介面中開啟空白工作流程。
在 [要求本文 JSON 結構描述] 方塊中,您可以選擇性地輸入 JSON 結構描述,描述您預期觸發程序接收的承載或資料。
設計工具會使用此結構描述來產生代表觸發程序輸出的權杖。 然後,您可以在邏輯應用程式的整個工作流程中輕鬆地參考這些輸出。 深入瞭解 從 JSON 架構產生的令牌。
針對此範例,輸入下列結構描述:
{ "type": "object", "properties": { "address": { "type": "object", "properties": { "streetNumber": { "type": "string" }, "streetName": { "type": "string" }, "town": { "type": "string" }, "postalCode": { "type": "string" } } } } }
或者,您可以提供範例承載來產生 JSON 結構描述:
在要求觸發程式中,選擇使用範例承載來產生架構。
在 [輸入或貼上範例 JSON 承載] 方塊中,輸入您的範例承載,例如:
{ "address": { "streetNumber": "00000", "streetName": "AnyStreet", "town": "AnyTown", "postalCode": "11111-1111" } }
準備就緒後,選取 [完成]。
[要求本文 JSON 結構描述] 方塊現在會顯示產生的結構描述。
儲存您的工作流程您
[HTTP POST URL] 方塊現在會顯示產生的回撥 URL,其他服務可以將其用來呼叫和觸發您的邏輯應用程式工作流程。 此 URL 包含查詢參數,其會指定用於驗證的共用存取簽章 (SAS) 金鑰。
若要複製回撥 URL,您有下列選項:
若要測試回呼 URL 並觸發工作流程,請使用 HTTP 要求工具和其指示,將 HTTP 要求傳送至 URL,包括 要求 觸發程式預期的方法。
此範例會使用 POST 方法搭配複製的 URL,其看起來像下列範例:
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
請求。 不過,您可以指定呼叫者必須使用的不同方法,但只能指定單一方法。
在 [要求 ] 觸發程式中,開啟 [ 進階參數 ] 列表,然後選取 [方法],將此屬性新增至觸發程式。
從 [方法] 清單中,改為選取觸發程序應該預期的方法。 或者,您可以指定自訂方法。
例如,選取 GET 方法,以便稍後測試端點的 URL。
透過端點 URL 傳遞參數
當想要透過端點的 URL 接受參數值時,您有下列選項:
透過 GET 參數 或 URL 參數接受值。
這些值會當作端點 URL 中成對的名稱和數值傳遞。 針對此選項,您必須在 要求 觸發程式中使用 GET 方法。 在後續動作中,您可以在運算式中使用
triggerOutputs()
函式,取得參數值作為觸發程序輸出。透過相對路徑為要求觸發程式中的參數接受值。
這些值會透過端點 URL 中的相對路徑傳遞。 您也需要明確選取觸發程式預期 的方法 。 在後續動作中,您可以直接參考這些輸出,以取得參數值作為觸發程序輸出。
透過 GET 參數接受值
在 [要求 ] 觸發程式中,開啟 [ 進階參數],將 Method 屬性新增至觸發程式,然後選取 GET 方法。
如需詳細資訊,請參閱 選取預期的要求方法。
在設計工具中, 遵循下列一般步驟來新增您想要使用參數值的動作。
在此範例中,選取名為 Response 的動作。
若要建置擷取參數值的
triggerOutputs()
運算式,請遵循下列步驟:在 [回應] 動作中,選取 Body 屬性內部,讓動態內容 (閃電圖示) 和表示式編輯器 (公式圖示) 的選項出現。 選取公式圖示以開啟運算式編輯器。
在運算式方塊中,輸入下列運算式,將
parameter-name
取代為您的參數名稱,然後選取 [確定]。triggerOutputs()['queries']['parameter-name']
在 Body 屬性中,表達式會解析為
triggerOutputs()
令牌。如果您儲存工作流程、離開設計工具並返回設計工具,權杖會顯示您指定的參數名稱,例如:
在程序代碼檢視中, Body 屬性會出現在回應動作的定義中,如下所示:
"body": "@{triggerOutputs()['queries']['parameter-name']}",
例如,假設您想要針對名為
postalCode
的參數傳遞一值。 Body 屬性會指定具有尾端空格的字串Postal Code:
,後面接著對應的運算式:
測試可呼叫的端點
從 請求 觸發程式複製工作流程 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
注意
如果您想要在 URI 中包含井字號 (#),請改用此編碼版本:%25%23
透過相對路徑接受值
在 [要求 ] 觸發程式中,開啟 [ 進階參數 ] 列表,然後選取 [相對路徑],以將此屬性新增至觸發程式。
在 [相對路徑 ] 屬性中,指定您希望URL接受之 JSON 架構中參數的相對路徑,例如
/address/{postalCode}
。在 [要求 ] 觸發程式底下, 遵循這些一般步驟來新增您想要使用參數值的動作。
針對此範例,新增 [回應] 動作。
在回應動作的 Body 屬性中,包含代表您在觸發程式相對路徑中指定的參數的令牌。
例如,假設您想要回應動作傳回
Postal Code: {postalCode}
。儲存您的工作流程您
在 要求 觸發程式中,回呼 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}
若要測試可呼叫的端點,請從 [要求 ] 觸發程式複製更新的回呼 URL,將 URL 貼到另一個瀏覽器視窗中,將 URL 取代
%7BpostalCode%7D
為123456
,然後按 Enter。瀏覽器會傳回具有下列文字的回應:
Postal Code: 123456
注意
如果您想要在 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"
}
}
}
}
}
呼叫其他工作流程
您可以藉由將要求巢狀置於目前的工作流程內,呼叫可接收要求的其他工作流程。 若要呼叫這些工作流程,請遵循下列步驟:
在設計工具中,遵循下列一般步驟,在此工作流程應用程式中新增名為 Invoke a workflow 的工作流程作業動作。
[工作流程名稱] 清單會顯示可供您選取的合格工作流程。
從 [工作流程名稱] 清單中,選取您想要呼叫的工作流程,例如:
參考來自輸入要求的內容
如果傳入要求的內容類型是 application/json
,您可以在傳入要求中參考屬性。 否則,會將此內容視為可傳遞給其他 API 的單一二進位單位。 若要在邏輯應用程式的工作流程內參考此內容,您必須先轉換該內容。
例如,如果您要傳遞具有 application/xml
型別的內容,您可以使用 @xpath()
表示式 來執行 XPath 擷取,或使用 @json()
運算式 將 XML 轉換成 JSON。 深入瞭解如何使用支持的 內容類型。
若要從傳入要求取得輸出,您可以使用 @triggerOutputs
表達式。 例如,假設您有看起來像此範例的輸出:
{
"headers": {
"content-type" : "application/json"
},
"body": {
"myProperty" : "property value"
}
}
若要特別存取 body
屬性,您可以使用 @triggerBody()
表達式 作為捷徑。
回應要求
有時候您想要將內容傳回給呼叫者,以回應觸發工作流程的特定要求。 若要建構回應的狀態碼、標頭和本文,請使用回應動作。 這個動作可以出現在工作流程的任何位置,而不只是工作流程的結尾。 如果您的工作流程未包含回應動作,端點會 立即 回應 202 已接受 的狀態。
若要讓原始呼叫端成功取得回應,除非觸發的工作流程稱為巢狀工作流程,否則回應的所有必要步驟都必須在 要求逾時限制 內完成。 如果未在此限制內傳回任何回應,傳入要求就會逾時,並收到 [408 用戶端逾時] 回應。
針對巢狀工作流程,無論需要多少時間,父工作流程都會繼續等候回應,直到所有步驟完成為止。
建構回應
在回應本文中,您可以包含多個標頭和任何類型的內容。 例如,下列回應的標頭會指定回應內容的類型為 application/json
,且本文包含 town
和 postalCode
屬性的值,這是根據本主題先前針對要求觸發程式所描述的 JSON 架構。
回應具有下列屬性:
屬性 (顯示) | 屬性(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 開放驗證(Microsoft Entra ID OAuth)、使用 Azure API 管理公開您的邏輯應用程式工作流程,或者限制 IP 位址以控制入站呼叫的來源,請參閱 安全性和數據存取 - 請求型觸發程式的入站呼叫存取。
問︰我可以進一步設定可呼叫的端點嗎?
答:是,HTTPS 端點可透過 Azure API 管理支援更進階的設定。 此服務也可讓您透過一致的方式管理所有 API,包括邏輯應用程式、設定自訂網域名稱、使用其他驗證方法等等,例如︰
- 變更要求方法
- 變更要求的 URL 區段
- 在 Azure 入口網站中設定 API 管理網域
- 設定檢查基本驗證的原則