Apache DolphinScheduler HTTP 任务节点实战:请求配置、响应校验与输出参数全解析
Apache DolphinScheduler HTTP 任务节点实战请求配置、响应校验与输出参数全解析【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/GitHub_Trending/dol/dolphinschedulerHTTP 任务节点是 Apache DolphinScheduler 中用于执行 HTTP 类型任务的内置节点它支持 GET、POST、PUT、DELETE 四种请求方法并内置响应校验能力让工作流中的接口调用既能发请求、也能验证返回结果。本文以 HTTP 任务官方文档 为主体结合仓库中dolphinscheduler-task-http插件的源码实现完整讲解该节点的参数配置、输出参数用法、校验逻辑的底层原理与可落地的任务样例帮助你快速在 DAG 中接入接口调用类任务。HTTP 任务节点综述该节点用于执行 HTTP 类型的任务除了发起请求之外还支持对 HTTP 响应做校验如默认响应码、自定义响应码、内容包含、内容不包含因此既可以承担调用外部 API的职责也可以作为工作流中的接口健康检查、数据提交、系统联动等环节。从源码结构看HTTP 任务是一个标准的 DolphinScheduler 任务插件其核心实现位于 dolphinscheduler-task-http 插件目录 下主要包含HttpTask.java任务执行主逻辑负责发请求与校验响应HttpParameters.java参数模型对应任务表单中的各配置项HttpCheckCondition.java校验条件枚举HttpRequestMethod.java请求方法枚举GET/POST/PUT/DELETE。创建 HTTP 任务在 DolphinScheduler 的 Web UI 中创建 HTTP 任务的步骤如下点击项目管理 - 项目名称 - 工作流定义点击创建工作流按钮进入 DAG 编辑页面从工具栏拖动HTTP 任务节点到画板中双击节点在弹出的任务配置面板中填写请求地址、请求类型、请求参数、校验条件等参数配置完成后将该节点与上游/下游任务连线保存并发布工作流。任务参数详解HTTP 任务节点的参数分为两类一类是所有任务共有的默认参数一类是 HTTP 特有的任务参数。默认任务参数任务名称、运行标志、缓存执行、描述、任务优先级、Worker 分组、任务组名称、组内优先级、环境名称、失败重试次数、失败重试间隔、CPU 配额、最大内存、超时告警、资源、前置任务、延时执行时间等通用配置请参考 DolphinScheduler 任务参数附录 的默认任务参数一栏此处不再赘述。HTTP 特有任务参数任务参数描述请求地址http 请求 URL请求类型支持 GET、POST、PUT、DELETE请求参数支持 Parameter、Body、Headers 三种类型校验条件支持默认响应码、自定义响应码、内容包含、内容不包含校验内容当校验条件选择自定义响应码、内容包含、内容不包含时需填写校验内容自定义参数是 http 局部的用户自定义参数会替换脚本中以${变量}的内容从源码角度进一步解读这些参数在 HttpParameters.java 中url对应请求地址httpMethod对应请求类型枚举值见 HttpRequestMethod.java仅支持 GET、POST、PUT、DELETEhttpParams对应请求参数列表列表中的每一项通过httpParametersType区分为 Parameter 或 Headers 两种类型见 HttpParametersType.javaBody 则单独存放于httpBody字段httpCheckCondition与condition对应校验条件与校验内容。需要注意HttpParameters.checkParameters() 的合法性校验要求URL 非空、请求方法非空且连接超时时间connectTimeout大于 0否则任务初始化阶段会直接抛出http task params is not valid异常。任务输出参数responseHTTP 任务会将其请求返回结果作为输出参数暴露给下游任务使用任务参数描述responseVARCHARHTTP 请求返回结果下游任务可以使用${taskName.response}引用该输出参数。例如当前 task1 为 HTTP 任务下游任务可以使用${task1.response}引用 task1 的输出参数。输出参数的生成逻辑在 HttpTask.addDefaultOutput() 中任务将响应体封装为一个名为{taskName}.response的Property类型为VARCHAR、方向为OUT并写入参数池var pool。也就是说只要上游 HTTP 任务执行成功下游任务无论是什么类型都可以通过${task1.response}拿到该任务的完整响应内容典型的应用场景包括由 HTTP 任务获取接口返回值再交给后续的 Shell、Python 或 SQL 任务做进一步处理。任务样例使用 POST 向登录页面提交数据HTTP 定义了与服务器交互的不同方法最基本的方法有 4 种GET、POST、PUT、DELETE。这里我们使用 HTTP 任务节点演示使用 POST 向系统的登录页面发送请求、提交数据。主要配置参数如下以下参数均可通过内置参数替换例如使用${task1.response}、${today}等URL访问目标资源的地址这里为系统的登录页面请求类型GET、POST、PUT、DELETEHeaders请求头信息。当前仅支持application/json、application/x-www-form-urlencoded两种格式如果输入其他格式默认会使用application/json格式。从源码看HttpTask.getContentType() 会从 Headers 列表中查找Content-Type定义于 HttpConstants.java若未找到或值不合法则回退为application/json而 Headers 中的Content-Type项会被 getHeaders() 过滤掉不参与普通请求头的拼装HTTP ParametersGET、DELETE 请求参数HTTP BodyPOST、PUT 请求参数校验条件默认响应码 200、自定义响应码、内容包含、内容不包含校验内容当校验条件为自定义响应码、内容包含、内容不包含时需填写校验内容校验内容为模糊匹配。关于 HTTP Body 的格式HttpTask.getRequestBody() 会将 Body 先解析为 JSON 节点要求必须是合法的 JSON 对象否则抛出Http request body should be a json object异常。因此填写 Body 时应使用形如{username:admin,password:******}的 JSON 格式。校验条件的底层实现四种模式如何判定任务成败校验条件是 HTTP 任务区别于普通发个请求的关键能力。四种校验模式的枚举定义在 HttpCheckCondition.java 中而判定逻辑实现在 HttpTask.validateResponse()具体规则如下STATUS_CODE_DEFAULT默认响应码要求响应状态码为 200即 HttpConstants.RESPONSE_CODE_SUCCESS这也是校验条件未显式配置时的默认值STATUS_CODE_CUSTOM自定义响应码要求实际状态码与校验内容中填写的数字完全相等Integer.parseInt(condition)仅支持单个整数BODY_CONTAINS内容包含响应体非空且必须包含校验内容中填写的子串模糊匹配BODY_NOT_CONTAINS内容不包含响应体非空且不能包含校验内容中填写的子串。任何一条规则不满足任务都会以失败状态结束EXIT_CODE_FAILURE并输出包含 URL、状态码、校验条件与响应体的错误日志全部满足则记录成功日志并以成功状态结束。仓库中的测试用例 HttpTaskTest.java 使用 MockWebServer 分别对四种 HTTP 方法、成功与失败的校验路径进行了覆盖验证可作为理解各校验分支行为的参考。HTTP 请求的底层执行原理HTTP 任务的请求由 HttpTask.sendRequest() 根据请求类型分发到对应的发送方法GET 走sendGetRequest()、POST 走sendPostRequest()、PUT 走sendPutRequest()、DELETE 走sendDeleteRequest()底层统一通过 DolphinScheduler 公共模块封装的 OkHttp 工具OkHttpUtils发起请求。几个值得注意的实现细节GET/DELETE 与 POST/PUT 的参数位置不同GET、DELETE 请求的参数以 Parameter 形式拼接进 URL见getRequestParams()而 POST、PUT 的参数以 Body 形式携带见getRequestBody()超时时间connectTimeout参数单位毫秒同时作用于连接、读取等环节且在参数校验时要求必须大于 0参数占位符替换无论是 Headers、Parameter 还是 Body 中的值都会经过ParameterUtils.convertParameterPlaceholders()做${变量}占位符替换见 HttpTask.java因此 URL、请求头、参数值、Body 中都可以引用工作流级/任务级的自定义参数或内置参数实现一套模板、动态取值。小结HTTP 任务节点让调用接口成为 DolphinScheduler 工作流中的一等公民通过四种请求方法覆盖常见的 RESTful 调用场景通过四种校验条件把接口是否正常固化为任务成败的判定标准通过${taskName.response}输出参数实现跨任务的数据传递再配合内置参数与自定义参数的占位符替换足以胜任接口触发、健康检查、系统联动等绝大多数 HTTP 集成需求。若需进一步了解该任务的源码与测试细节可深入阅读 dolphinscheduler-task-http 插件 目录或参考 HTTP 任务官方文档 与 任务参数附录。【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/GitHub_Trending/dol/dolphinscheduler创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →