建立可以在 Azure Logic Apps 中使用 HTTPS 端點來呼叫、觸發或建立巢狀的工作流程
適用於:Azure Logic Apps (使用量 + 標準)
有些案例可能會要求您建立可接收來自其他服務或工作流程的輸入要求邏輯應用程式工作流程,或您可以使用 URL 呼叫的工作流程。 針對此工作,當您使用下列任何要求型觸發程序類型時,可以在工作流程上公開原生同步 HTTPS 端點:
- 要求
- HTTP Webhook
- 具有 ApiConnectionWebhook 類型,而且可以接收輸入 HTTPS 要求的受控連接器觸發程序
本指南示範如何藉由新增要求觸發程序,然後從另一個工作流程呼叫該端點,為您的工作流程建立可呼叫的端點。 所有原則都同樣適用可接收輸入要求的其他要求型觸發程序類型。
必要條件
Azure 帳戶和訂用帳戶。 如果您沒有訂用帳戶,請註冊一個免費的 Azure 帳戶。
您想要使用要求觸發程序,來建立可呼叫端點所在的邏輯應用程式工作流程。 您可以從空白工作流程或現有的工作流程 (在其中可取代目前的觸發程序) 開始。 此範例會從空白邏輯應用程式開始。
安裝或使用可傳送 HTTP 要求以測試解決方案的工具,例如:
- Visual Studio Code 搭配 Visual Studio Marketplace 的延伸模組
- PowerShell Invoke-RestMethod
- Microsoft Edge - 網路主控台工具
- Bruno
- curl
警告
如果您有敏感資料,例如認證、秘密、存取權杖、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 方法,以便您稍後測試 HTTP 端點的 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
透過相對路徑接受值
在要求觸發程序中,開啟 [進階參數] 清單,然後選取 [相對路徑],將此屬性新增至觸發程序。
在 Relative path 屬性中,指定 JSON 結構描述中參數的相對路徑,您想要 URL 接受該相對路徑,例如,
/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"
}
}
}
}
}
呼叫其他工作流程
您可以藉由將要求巢狀置於目前的工作流程內,呼叫可接收要求的其他工作流程。 若要呼叫這些工作流程,請遵循下列步驟:
在設計工具中,遵循這些一般步驟,新增名為叫用此工作流程應用程式中的工作流程的工作流程作業動作。
[工作流程名稱] 清單會顯示可供您選取的合格工作流程。
從 [工作流程名稱] 清單中,選取您想要呼叫的工作流程,例如:
參考來自輸入要求的內容
如果傳入要求的內容類型是 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
,而且本文包含 town
和 postalCode
屬性的值。
回應具有下列屬性:
屬性 (顯示) | 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,包括邏輯應用程式、設定自訂網域名稱、使用其他驗證方法等等,例如︰
- 變更要求方法
- 變更要求的 URL 區段
- 在 Azure 入口網站中設定 API 管理網域
- 設定檢查基本驗證的原則