在 Azure 逻辑应用中接收和响应对工作流的入站 HTTPS 调用
适用范围:Azure 逻辑应用(消耗型 + 标准型)
本操作指南演示如何创建一个逻辑应用工作流,该工作流可以使用请求内置触发器接收和处理来自其他服务的入站 HTTPS 请求或调用。 当工作流使用此触发器时,可以使用响应内置操作响应 HTTPS 请求。
注意
仅当使用请求触发器时,“响应”操作才有效。
例如,此列表描述了使用“请求”触发器和“响应”操作时工作流可以执行的一些任务:
接收并响应对本地数据库中数据的 HTTPS 请求。
接收并响应从另一个逻辑应用工作流发送的 HTTPS 请求。
发生外部 Webhook 事件时触发工作流运行。
若要改为通过发送传出或出站请求来运行工作流,请使用 HTTP 内置触发器或 HTTP 内置操作。
先决条件
Azure 帐户和订阅。 如果没有订阅,可以注册试用版 Azure 订阅。
要接收入站 HTTPS 请求的逻辑应用工作流。 若要使用“请求”触发器启动工作流,必须从空白工作流开始。 若要使用“响应”操作,工作流必须从“请求”触发器开始。
安装或使用可发送 HTTP 请求以测试解决方案的工具,例如:
- Visual Studio Code,具有来自 Visual Studio Marketplace 的扩展
- PowerShell Invoke-RestMethod
- Microsoft Edge - 网络控制台工具
- Bruno
- Curl
注意
对于具有敏感数据(例如凭据、机密、访问令牌、API 密钥和其他类似信息)的情况,请务必使用具有必要安全功能可保护数据的工具,该工具可脱机或本地工作,不会将数据同步到云,并且不需要登录联机帐户。 这样可以降低向公众公开敏感数据的风险。
添加“请求”触发器
“请求”触发器创建可手动调用的终结点,该终结点仅处理 HTTPS 上的入站请求。 当调用方将请求发送到此终结点时,“请求”触发器会触发并运行工作流。 有关如何调用此触发器的信息,请参阅在 Azure 逻辑应用中使用 HTTPS 终结点调用、触发或嵌套工作流。
在 Azure 门户中,打开设计器中的消耗型逻辑应用和空白工作流。
在设计器中,按照这些常规步骤查找并添加名为“收到 HTTP 请求时”的“请求”内置触发器。
出现触发器信息框后,根据需要提供以下信息:
属性名称 JSON 属性名称 必须 说明 HTTP POST URL {无} 是 保存工作流后生成的终结点 URL,用于发送触发工作流的请求。 请求正文 JSON 架构 schema
否 JSON 架构,用于描述传入请求正文中的属性和值。 设计器将使用此架构为请求中的属性生成标记。 这样一来,工作流就可以分析、使用“请求”触发器中的输出,并将其传递到工作流中。
如果没有 JSON 架构,可以使用“使用示例有效负载生成架构”功能从示例有效负载生成此架构。以下示例演示了一个示例 JSON 架构:
以下示例演示了完整示例 JSON 架构:
{ "type": "object", "properties": { "account": { "type": "object", "properties": { "name": { "type": "string" }, "ID": { "type": "string" }, "address": { "type": "object", "properties": { "number": { "type": "string" }, "street": { "type": "string" }, "city": { "type": "string" }, "state": { "type": "string" }, "country": { "type": "string" }, "postalCode": { "type": "string" } } } } } } }
输入 JSON 架构时,设计器会显示一个提醒,提醒在请求中包含 Content-Type 标头并将标头值设置为 application/json。 有关详细信息,请参阅处理内容类型。
以下示例演示如何以 JSON 格式显示 Content-Type 标头:
{ "Content-Type": "application/json" }
若要生成基于预期有效负载(数据)的 JSON 架构,可以使用 JSONSchema.net 之类的工具,也可以执行以下步骤:
在“请求”触发器中,选择“使用示例有效负载生成架构”。
输入示例有效负载,然后选择“完成”。
以下示例演示了示例有效负载:
{ "account": { "name": "Contoso", "ID": "12345", "address": { "number": "1234", "street": "Anywhere Street", "city": "AnyTown", "state": "AnyState", "country": "USA", "postalCode": "11111" } } }
若要检查入站调用是否具有与指定架构匹配的请求正文,请执行以下步骤:
要强制入站消息具有与架构描述的完全相同的字段,请在架构中添加
required
属性并指定必填字段。 添加addtionalProperties
属性,并将值设置为false
。例如,以下架构指定入站消息必须具有
msg
字段(而不是任何其他字段):{ "properties": { "msg": { "type": "string" } }, "type": "object", "required": ["msg"], "additionalProperties": false }
在请求触发器的标题栏中,选择省略号按钮 (...)。
在触发器的设置中,开启“架构验证”,然后选择“完成”。
如果入站调用的请求正文与架构不匹配,则触发器会返回“HTTP 400 错误请求”错误。
若要将其他属性或参数添加到触发器,请打开“添加新参数”列表,然后选择要添加的参数。
属性名称 JSON 属性名称 必须 说明 方法 method
否 传入的请求在调用逻辑应用时必须使用的方法 相对路径 relativePath
否 逻辑应用终结点 URL 可接受的参数的相对路径 以下示例将添加“Method”属性:
Method 属性显示在触发器中,使你可以从列表中选择方法。
准备就绪后,保存工作流。 在设计器工具栏上选择“保存”。
此步骤将生成 URL,其可用于发送触发工作流的请求。
若要复制生成的 URL,请选择 URL 旁边的复制图标。
注意
若要在调用请求触发器时在 URI 中包含哈希符号或井号 (#),请改用此编码版本:
%25%23
现在,在下一步中添加其他操作,以继续生成工作流。 例如,可以通过添加响应操作来响应请求,该响应操作可用于返回自定义响应,本文后面部分将介绍此相关内容。
备注
工作流仅在有限的时间内使入站请求保持打开状态。 假设工作流还包含“响应”操作,如果工作流在此有限时间到期后没有向调用方返回响应,则工作流会向调用方返回“504 网关超时”状态。 如果工作流不包含“响应”操作,则工作流会立即向调用方返回“202 已接受”状态。
有关工作流入站调用(例如传输层安全性 (TLS)(以前称为安全套接字层 (SSL))、使用 Microsoft Entra ID 的 OAuth、共享访问签名 (SAS))的安全性、身份验证和加密的信息,以及如何使用 Azure API Management 来公开逻辑应用资源,或限制发起入站调用的 IP 地址,请参阅保护访问和数据 - 对基于请求的触发器的入站调用的访问。
触发器输出
下表列出了“请求”触发器的输出:
JSON 属性名称 | 数据类型 | 说明 |
---|---|---|
headers | 对象 | 描述请求中的标头的 JSON 对象 |
body | 对象 | 描述请求中的正文内容的 JSON 对象 |
添加响应操作
使用“请求”触发器接收入站请求时,可以使用“响应”内置操作(仅适用于“请求”触发器)对响应进行建模并将有效负载结果发送回调用方。 这种与请求触发器和响应操作的结合会创建请求-响应模式。 除了 Foreach 循环和循环内以及并行分支以外,可以在工作流中的任意位置添加响应操作。
重要
如果“响应”操作包括以下标头,则 Azure 逻辑应用会从生成的响应消息中自动删除这些标头,而不会显示任何警告或错误。 Azure 逻辑应用不会包含这些标头,尽管服务不会阻止你保存具有带这些标头的“响应”操作的工作流。
Allow
Content-*
标头(使用 POST 和 PUT 操作时的Content-Disposition
、Content-Encoding
和Content-Type
除外),但 GET 操作不包括这些标头Cookie
Expires
Last-Modified
Set-Cookie
Transfer-Encoding
如果在包含分支的复杂工作流中有一个或多个“响应”操作,请确保工作流在运行时处理至少一个“响应”操作。 否则,如果跳过所有响应操作,调用方将收到“502 错误的网关”错误,即使工作流成功完成也是如此。
在标准逻辑应用无状态工作流中,“响应”操作必须最后显示在工作流中。 如果操作出现在任何其他位置,则 Azure 逻辑应用在所有其他操作运行完之前不会运行该操作。
在工作流设计器上,按照这些常规步骤查找并添加名为“响应”的响应内置操作。
为简单起见,以下示例演示了折叠的“请求”触发器。
在操作信息框中,添加响应消息所需的值。
属性名称 JSON 属性名称 必须 说明 状态代码 statusCode
是 要在响应中返回的状态代码 标头 headers
否 一个 JSON 对象,描述要包含在响应中的一个或多个标头 正文 body
否 响应正文 在任何文本字段中选择时,动态内容列表会自动打开。 然后,可以从工作流中的前面步骤选择表示任何可用输出的标记。 你指定的架构中的属性也会在此动态内容列表中显示。 你可以选择要在工作流中使用的这些属性。
例如,在“标头”字段中,包括 Content-Type 作为键名,并将键值设置为 application/json,如本文前面所述。 对于“正文”框,可以从动态内容列表中选择触发器正文输出。
若要查看 JSON 格式的标头,请选择“切换到文本视图”。
要为操作添加更多属性(例如响应正文的 JSON 架构),请从“添加新参数”列表,选择要添加的参数。
完成后,保存工作流。 在设计器工具栏上选择“保存”。
测试工作流
若要触发工作流,请使用 HTTP 请求工具及其说明将 HTTP 请求发送到为“请求”触发器生成的 URL,包括“请求”触发器所需的方法。
若要详细了解触发器的基础 JSON 定义以及如何调用此触发器,请参阅以下主题:“请求”触发器类型和通过 Azure 逻辑应用中的 HTTP 终结点调用、触发或嵌套工作流。
安全性和身份验证
在以请求触发器(但不是 Webhook 触发器)开始的标准逻辑应用工作流中,可使用 Azure Functions 预配,通过托管标识对发送到由该触发器创建的终结点的入站调用进行身份验证。 此预配也称为“简易身份验证”。 有关详细信息,请查看使用 Easy Auth 在标准逻辑应用中触发工作流。
有关逻辑应用工作流入站调用(例如传输层安全性 (TLS) [以前称为安全套接字层 (SSL)] 和 Microsoft Entra ID 开放式身份验证 (Microsoft Entra ID OAuth))的安全性、授权和加密的详细信息,以及如何使用 Azure API 管理来公开逻辑应用,或限制发起入站调用的 IP 地址,请参阅保护访问和数据 - 对基于请求的触发器的入站调用的访问。