HTTP
HTTP 任务用于调用通过 HTTP/HTTPS 暴露的远程服务。它支持各种 HTTP 方法、请求头、请求体内容以及其他与 API 或远程服务交互所需的配置。
HTTP 任务会评估提供的参数,相应地构建 HTTP 请求,并将其发送到指定的 URI。它通过提取有用的信息(如状态码、响应头和响应体内容)来处理响应,这些信息可以在工作流的后续任务中使用。
任务参数
为 HTTP 任务配置以下参数。
参数 | 描述 | 必填/可选 |
---|---|---|
inputParameters.uri | 服务的 URI。使用 vipAddress 时可以是部分值,也可以是服务器地址。 | 必填 |
inputParameters.method | HTTP 方法。支持的方法:GETHEADPOSTPUTPATCHDELETEOPTIONSTRACE | 必填 |
inputParameters.accept | 服务器所需的 accept 请求头。默认值为 application/json 。支持的类型:application/java-archiveapplication/EDI-X12application/EDIFACTapplication/javascriptapplication/octet-streamapplication/oggapplication/pdfapplication/xhtml+xmlapplication/x-shockwave-flashapplication/jsonapplication/ld+jsonapplication/xmlapplication/zipapplication/x-www-form-urlencodedaudio/mpegaudio/x-ms-wmaaudio/vnd.rn-realaudioaudio/x-wavimage/gifimage/jpegimage/pngimage/tiffimage/vnd.microsoft.iconimage/x-iconimage/vnd.djvuimage/svg+xml您可以将其他请求头作为变量传递。 | 可选 |
inputParameters.contentType | 请求主体的 MIME 类型。支持的值:application/jsontext/plainapplication/xmlimage/svg+xml您可以将其作为变量传递。 | 可选 |
inputParameters.headers | 要包含在请求中的 HTTP 头。支持的值:Accept—响应的预期 MIME 类型。支持的值:application/jsontext/plainapplication/xml您可以将其他请求头作为变量传递。 | 可选 |
inputParameters.body | POST、PUT 或 PATCH 方法的请求体。可以是文本或参数,如字符串、数字、布尔值、null 或对象/数组。 | POST、PUT 或 PATCH 方法必填 |
inputParameters.encode | 确定 URI 是否需要编码。设置为 true 时,Conductor 将在发送 HTTP 请求之前自动对查询参数进行编码。如果 URI 已经编码,则设置为 false 。默认值为 true。 | 可选 |
inputParameters.asyncComplete | 启用时,任务完成是异步的,任务保持进行中状态,同时等待外部 API 或事件来完成任务。 | 可选 |
任务配置
这是 HTTP 任务的任务配置。
{
"name": "http",
"taskReferenceName": "http_ref",
"type": "HTTP",
"inputParameters": {
"uri": "https://www.taskflow.cn/api",
"method": "GET",
"accept": "application/json",
"contentType": "application/json",
"encode": true,
"headers": {
"Authorization": "Bearer ${workflow.secrets.api_key}",
"Accept": "application/json"
},
"body": {
"key": "value"
}
},
"asyncComplete": true
}
任务输出
HTTP 任务将返回以下参数。
参数 | 描述 |
---|---|
response | 表示响应的 JSON 对象(如果存在)。 |
headers | 包含响应元数据的对象。 |
statusCode | 表示请求成功或失败的 HTTP 状态码。 |
reasonPhrase | 与 HTTP 状态码关联的原因短语。 |
body | 包含 API 返回数据的响应体。 |
在 UI 中添加 HTTP 任务
添加 HTTP 任务的步骤:
- 在工作流中,选择 (+) 图标并添加 HTTP 任务。
- 从 Method 下拉列表中选择用于发送请求的 HTTP 方法。
- 在 URL 中,添加 HTTP 任务要调用的 URI。
- 在 Accept 中,选择服务器所需的 accept 请求头。
- 在 Content-Type 中,选择服务器的内容类型。
- (可选)在 Other-headers 中,添加要随请求一起发送的任何额外 HTTP 请求头。
- 在 Body 中,使用 PUT、POST 或 PATCH 方法时添加请求体。
- (可选)启用或禁用 Encode 以指定是否需要编码 URI。
- (可选)如果任务要异步完成,则将 Async complete 设置为 true。
示例
以下是使用 HTTP 任务的一些示例。
发送 POST 请求
发送 HTTP POST 请求的示例工作流:
//任务定义
{
"name": "http_post_example",
"taskReferenceName": "post_example",
"inputParameters": {
"http_request": {
"uri": "https://jsonplaceholder.typicode.com/posts/",
"method": "POST",
"body": {
"title": "${get_example.output.response.body.title}",
"userId": "${get_example.output.response.body.userId}",
"action": "doSomething"
}
}
},
"type": "HTTP"
}
编排长时间运行的 API
探索关于编排长时间运行的 API 的完整教程。
使用 'Async Complete' 选项的示例工作流
HTTP 任务配置中的 asyncComplete 选项允许异步标记任务为已完成,为工作流执行提供灵活性。以下是启用 'asyncComplete' 的示例:
{
"name": "async_complete_example",
"description": "编辑或扩展此示例工作流。设置工作流名称以开始",
"version": 1,
"tasks": [
{
"name": "http_task_85tf2",
"taskReferenceName": "http_task_85tf2_ref",
"inputParameters": {
"http_request": {
"uri": "https://www.taskflow.cn/api",
"method": "GET",
"connectionTimeOut": 3000,
"readTimeOut": "3000",
"accept": "application/json",
"contentType": "application/json"
}
},
"type": "HTTP",
"asyncComplete": true
}
],
"schemaVersion": 2,
"ownerEmail": "john.doe@acme.com"
}
现在,让我们在开发者游乐场中运行它。
- 在 Workflow Name 下,选择 async_complete_example。
- 点击 Run Workflow。
执行时,HTTP 任务保持"已调度"状态而不是立即完成,允许异步完成。可以使用以下方法完成任务:
使用 API
工作流运行后,记下执行页面上工作流名称附近显示的生成的 workflowId。
使用此 workflowId 和 taskRefName 通过以下 API 完成任务:
POST /api/tasks/{workflowId}/{taskRefName}/{status}
从 Conductor UI
从工作流执行页面,点击任务并手动将状态更新为"已完成"。
使用这些方法可以异步完成工作流,这在暂停工作流以进行外部干预时很有用。