2020-09-09 14:42:18 +08:00
<!DOCTYPE html>
< html lang = "en-US" >
< head >
< meta charset = "utf-8" >
< meta name = "viewport" content = "width=device-width,initial-scale=1" >
< title > 服务编排配置 | Fizz Gateway< / title >
< meta name = "generator" content = "VuePress 1.5.2" >
< meta name = "description" content = "" >
2020-11-24 18:08:25 +08:00
< link rel = "preload" href = "/assets/css/0.styles.34d67128.css" as = "style" > < link rel = "preload" href = "/assets/js/app.307fd529.js" as = "script" > < link rel = "preload" href = "/assets/js/2.5b001851.js" as = "script" > < link rel = "preload" href = "/assets/js/9.6a35b918.js" as = "script" > < link rel = "prefetch" href = "/assets/js/10.13320b99.js" > < link rel = "prefetch" href = "/assets/js/11.e86eaecd.js" > < link rel = "prefetch" href = "/assets/js/12.4047a547.js" > < link rel = "prefetch" href = "/assets/js/13.beb516ad.js" > < link rel = "prefetch" href = "/assets/js/14.7e909813.js" > < link rel = "prefetch" href = "/assets/js/15.0358b10e.js" > < link rel = "prefetch" href = "/assets/js/16.f0131aa9.js" > < link rel = "prefetch" href = "/assets/js/17.53dd322c.js" > < link rel = "prefetch" href = "/assets/js/18.603a235b.js" > < link rel = "prefetch" href = "/assets/js/19.5c4af839.js" > < link rel = "prefetch" href = "/assets/js/20.1bf2bcbb.js" > < link rel = "prefetch" href = "/assets/js/21.dca6f5c4.js" > < link rel = "prefetch" href = "/assets/js/22.db62cc12.js" > < link rel = "prefetch" href = "/assets/js/23.94679012.js" > < link rel = "prefetch" href = "/assets/js/24.dc881ae9.js" > < link rel = "prefetch" href = "/assets/js/25.bbf8bff1.js" > < link rel = "prefetch" href = "/assets/js/26.70321f43.js" > < link rel = "prefetch" href = "/assets/js/27.505a813e.js" > < link rel = "prefetch" href = "/assets/js/28.2160d3a0.js" > < link rel = "prefetch" href = "/assets/js/29.ab810898.js" > < link rel = "prefetch" href = "/assets/js/3.13d0117a.js" > < link rel = "prefetch" href = "/assets/js/30.37a581ce.js" > < link rel = "prefetch" href = "/assets/js/31.35595b86.js" > < link rel = "prefetch" href = "/assets/js/4.7d5f245c.js" > < link rel = "prefetch" href = "/assets/js/5.a59b20e1.js" > < link rel = "prefetch" href = "/assets/js/6.b5dc0bcc.js" > < link rel = "prefetch" href = "/assets/js/7.d2312c9e.js" > < link rel = "prefetch" href = "/assets/js/8.645ad4e8.js" >
2020-11-09 11:57:42 +08:00
< link rel = "stylesheet" href = "/assets/css/0.styles.34d67128.css" >
2020-09-09 14:42:18 +08:00
< / head >
< body >
2020-11-09 11:57:42 +08:00
< div id = "app" data-server-rendered = "true" > < div class = "theme-container" > < header class = "navbar" > < div class = "sidebar-button" > < svg xmlns = "http://www.w3.org/2000/svg" aria-hidden = "true" role = "img" viewBox = "0 0 448 512" class = "icon" > < path fill = "currentColor" d = "M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z" > < / path > < / svg > < / div > < a href = "/" class = "home-link router-link-active" > <!-- --> < span class = "site-name" > Fizz Gateway< / span > < / a > < div class = "links" > < div class = "search-box" > < input aria-label = "Search" autocomplete = "off" spellcheck = "false" value = "" > <!-- --> < / div > < nav class = "nav-links can-hide" > < div class = "nav-item" > < a href = "/" class = "nav-link" >
2020-09-09 14:42:18 +08:00
首页
2020-11-09 11:57:42 +08:00
< / a > < / div > < div class = "nav-item" > < a href = "/guide/intro/" class = "nav-link" >
2020-09-09 14:42:18 +08:00
使用文档
< / a > < / div > < a href = "https://github.com/wehotel/fizz-gateway-community" target = "_blank" rel = "noopener noreferrer" class = "repo-link" >
查看源码
2020-11-09 11:57:42 +08:00
< svg xmlns = "http://www.w3.org/2000/svg" aria-hidden = "true" x = "0px" y = "0px" viewBox = "0 0 100 100" width = "15" height = "15" class = "icon outbound" > < path fill = "currentColor" d = "M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z" > < / path > < polygon fill = "currentColor" points = "45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9" > < / polygon > < / svg > < / a > < / nav > < / div > < / header > < div class = "sidebar-mask" > < / div > < aside class = "sidebar" > < nav class = "nav-links" > < div class = "nav-item" > < a href = "/" class = "nav-link" >
2020-09-09 14:42:18 +08:00
首页
2020-11-09 11:57:42 +08:00
< / a > < / div > < div class = "nav-item" > < a href = "/guide/intro/" class = "nav-link" >
2020-09-09 14:42:18 +08:00
使用文档
< / a > < / div > < a href = "https://github.com/wehotel/fizz-gateway-community" target = "_blank" rel = "noopener noreferrer" class = "repo-link" >
查看源码
2020-11-24 18:08:25 +08:00
< svg xmlns = "http://www.w3.org/2000/svg" aria-hidden = "true" x = "0px" y = "0px" viewBox = "0 0 100 100" width = "15" height = "15" class = "icon outbound" > < path fill = "currentColor" d = "M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z" > < / path > < polygon fill = "currentColor" points = "45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9" > < / polygon > < / svg > < / a > < / nav > < ul class = "sidebar-links" > < li > < section class = "sidebar-group depth-0" > < p class = "sidebar-heading" > < span > Fizz简介< / span > <!-- --> < / p > < ul class = "sidebar-links sidebar-group-items" > < li > < a href = "/guide/intro/" class = "sidebar-link" > 什么是Fizz网关< / a > < ul class = "sidebar-sub-headers" > < li class = "sidebar-sub-header" > < a href = "/guide/intro/#什么是fizz网关" class = "sidebar-link" > 什么是Fizz网关< / a > < / li > < li class = "sidebar-sub-header" > < a href = "/guide/intro/#fizz的设计" class = "sidebar-link" > Fizz的设计< / a > < / li > < li class = "sidebar-sub-header" > < a href = "/guide/intro/#产品特性" class = "sidebar-link" > 产品特性< / a > < / li > < / ul > < / li > < / ul > < / section > < / li > < li > < section class = "sidebar-group depth-0" > < p class = "sidebar-heading" > < span > 安装部署< / span > <!-- --> < / p > < ul class = "sidebar-links sidebar-group-items" > < li > < a href = "/guide/installation/" class = "sidebar-link" > 安装< / a > < ul class = "sidebar-sub-headers" > < li class = "sidebar-sub-header" > < a href = "/guide/installation/#安装依赖" class = "sidebar-link" > 安装依赖< / a > < / li > < li class = "sidebar-sub-header" > < a href = "/guide/installation/#安装fizz" class = "sidebar-link" > 安装Fizz< / a > < / li > < / ul > < / li > < / ul > < / section > < / li > < li > < section class = "sidebar-group depth-0" > < p class = "sidebar-heading" > < span > 路由转发< / span > <!-- --> < / p > < ul class = "sidebar-links sidebar-group-items" > < li > < a href = "/guide/proxy/" class = "sidebar-link" > 路由转发< / a > < ul class = "sidebar-sub-headers" > < li class = "sidebar-sub-header" > < a href = "/guide/proxy/#路由转发介绍" class = "sidebar-link" > 路由转发介绍< / a > < / li > < li class = "sidebar-sub-header" > < a href = "/guide/proxy/#接入路由转发" class = "sidebar-link" > 接入路由转发< / a > < / li > < / ul > < / li > < / ul > < / section > < / li > < li > < section class = "sidebar-group depth-0" > < p class = "sidebar-heading open" > < span > 服务编排< / span > <!-- --> < / p > < ul class = "sidebar-links sidebar-group-items" > < li > < a href = "/guide/aggregate/" aria-current = "page" class = "sidebar-link" > 服务编排介绍< / a > < ul class = "sidebar-sub-headers" > < li class = "sidebar-sub-header" > < a href = "/guide/aggregate/#什么是服务编排" class = "sidebar-link" > 什么是服务编排< / a > < / li > < li class = "sidebar-sub-header" > < a href = "/guide/aggregate/#举例说明" class = "sidebar-link" > 举例说明< / a > < / li > < li class = "sidebar-sub-header" > < a href = "/guide/aggregate/#服务编排架构" class = "sidebar-link" > 服务编排架构< / a > < / li > < li class = "sidebar-sub-header" > < a href = "/guide/aggregate/#适用场景" class = "sidebar-link" > 适用场景< / a > < / li > < / ul > < / li > < li > < a href = "/guide/aggregate/overview.html" class = "sidebar-link" > 步骤总览< / a > < / li > < li > < a href = "/guide/aggregate/configuration.html" aria-current = "page" class = "active sidebar-link" > 服务编排配置< / a > < ul class = "sidebar-sub-headers" > < li class = "sidebar-sub-header" > < a href = "/guide/aggregate/configuration.html#创建服务" class = "sidebar-link" > 创建服务< / a > < / li > < li class = "sidebar-sub-header" > < a href = "/guide/aggregate/configuration.html#创建聚合接口" class = "sidebar-link" > 创建聚合接口< / a > < / li > < li class = "sidebar-sub-header" > < a href = "/guide/aggregate/configuration.html#配置输入" class = "sidebar-link" > 配置输入< / a > < / li > < li class = "sidebar-sub-header" > < a href = "/guide/aggregate/configuration.html#配置校验结果" class = "sidebar-link" > 配置校验结果< / a > < / li > < li class = "sidebar-sub-header" > < a href = "/guide/aggregate/configuration.html#配置步骤" class = "sidebar-link" > 配置步骤< / a > < / li > < li class = "sidebar-sub-header" > < a href = "/guide/aggregate/configuration.html#配置输出" class = "sidebar-link" > 配置输出< / a > < / li > < li class = "sidebar-sub-header" > < a href = "/guide/aggregate/configuration.html#脚本-2" class = "sidebar-link"
2020-09-09 14:42:18 +08:00
input.request.headers.aaa
< span class = "token comment" > # 获取入参请求体bbb字段的值< / span >
input.request.body.bbb
< span class = "token comment" > # 获取入参URL Query参数fff字段的值< / span >
input.request.params.fff
< span class = "token comment" > # 获取步骤1里request1的请求头ccc的值< / span >
step1.request1.request.headers.ccc
< span class = "token comment" > # 获取步骤1里request1的响应体ddd的值< / span >
step1.request1.response.body.ddd
< span class = "token comment" > # 获取步骤1结果里eee的值< / span >
step1.result.eee
2020-11-09 11:57:42 +08:00
< / code > < / pre > < / div > < ul > < li > 支持单值引用,如:string, int等< / li > < li > 支持对象类型的引用< / li > < / ul > < p > input: 表示调用方的输入数据, 如H5页面提交上来的参数< / p > < p > stepN.requestN: 表示步骤N里调用接口N的相关参数< / p > < p > stepN.result: 表示步骤N的转换结果< / p > < h4 id = "fallback与预处理条件" > < a href = "#fallback与预处理条件" class = "header-anchor" > #< / a > Fallback与预处理条件< / h4 > < p > < img src = "/aggr_config_step_fallback.png" alt = "" > < / p > < p > Fallback:< / p > < p > 当调用接口发生异常( 如超时、网络或系统异常) 可配置fallback方案: < / p > < ul > < li > Stop: 终止请求并立即返回< / li > < li > Continue: 继续后续的操作, 且要设置默认的fallback json< / li > < / ul > < p > 预处理: 根据条件判断是否要调用接口, 脚本返回true时才调用接口< / p > < h4 id = "配置步骤结果处理" > < a href = "#配置步骤结果处理" class = "header-anchor" > #< / a > 配置步骤结果处理< / h4 > < p > < img src = "/aggr_config_step_result.png" alt = "" > < / p > < ul > < li > < p > 支持对步骤里调用的每一个接口的返回结果做数据转换,如果配置数据转换规则原样返回并存储到上下文里供后续使用< / p > < / li > < li > < p > 支持对步骤里调用的一个或多个接口的返回结果做处理,并把处理完的结果存储到上下文里供后续使用,不配置则不处理< / p > < / li > < / ul > < h2 id = "配置输出" > < a href = "#配置输出" class = "header-anchor" > #< / a > 配置输出< / h2 > < p > < img src = "/aggr_config_output.png" alt = "" > < / p > < p > 配置返回给调用方的结果< / p > < ul > < li > 支持配置响应头< / li > < li > 支持配置响应体< / li > < li > 支持自定脚本处理复杂的业务逻辑< / li > < / ul > < h2 id = "脚本-2" > < a href = "#脚本-2" class = "header-anchor" > #< / a > 脚本< / h2 > < p > 目前支持以下脚本语言:< / p > < p > Javascript (推荐) - ECMAScript 5标准< / p > < p > JS脚本只支持单函数, 且函数名不可变, 在创建脚本时系统会自动生成初始模板, 模板里包含相关使用说明< / p > < p > < img src = "/aggr_config_script_1.png" alt = "" > < / p > < p > Groovy< / p > < p > < img src = "/aggr_config_script_2.png" alt = "" > < / p > < h3 id = "common-js-提供了操作context上下文的便捷操作函数" > < a href = "#common-js-提供了操作context上下文的便捷操作函数" class = "header-anchor" > #< / a > common.js 提供了操作context上下文的便捷操作函数< / h3 > < div class = "language-javascript extra-class" > < pre class = "language-javascript" > < code > < span class = "token comment" > /**
2020-09-09 14:42:18 +08:00
* context 上下文便捷操作函数
*
*/< / span >
< span class = "token keyword" > var< / span > common < span class = "token operator" > =< / span > < span class = "token punctuation" > {< / span >
< span class = "token comment" > /* *********** private function begin *********** */< / span >
< span class = "token comment" > // 获取上下文中客户端请求对象< / span >
< span class = "token function-variable function" > getInputReq< / span > < span class = "token operator" > :< / span > < span class = "token keyword" > function< / span > < span class = "token punctuation" > (< / span > < span class = "token parameter" > ctx< / span > < span class = "token punctuation" > )< / span > < span class = "token punctuation" > {< / span >
< span class = "token keyword" > if< / span > < span class = "token punctuation" > (< / span > < span class = "token operator" > !< / span > ctx < span class = "token operator" > ||< / span > < span class = "token operator" > !< / span > ctx< span class = "token punctuation" > [< / span > < span class = "token string" > 'input'< / span > < span class = "token punctuation" > ]< / span > < span class = "token operator" > ||< / span > < span class = "token operator" > !< / span > ctx< span class = "token punctuation" > [< / span > < span class = "token string" > 'input'< / span > < span class = "token punctuation" > ]< / span > < span class = "token punctuation" > [< / span > < span class = "token string" > 'request'< / span > < span class = "token punctuation" > ]< / span > < span class = "token punctuation" > )< / span > < span class = "token punctuation" > {< / span >
< span class = "token keyword" > return< / span > < span class = "token punctuation" > {< / span > < span class = "token punctuation" > }< / span > < span class = "token punctuation" > ;< / span >
< span class = "token punctuation" > }< / span >
< span class = "token keyword" > return< / span > ctx< span class = "token punctuation" > [< / span > < span class = "token string" > 'input'< / span > < span class = "token punctuation" > ]< / span > < span class = "token punctuation" > [< / span > < span class = "token string" > 'request'< / span > < span class = "token punctuation" > ]< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token comment" > // 获取上下文步骤中请求接口的请求对象< / span >
< span class = "token function-variable function" > getStepReq< / span > < span class = "token operator" > :< / span > < span class = "token keyword" > function< / span > < span class = "token punctuation" > (< / span > < span class = "token parameter" > ctx< span class = "token punctuation" > ,< / span > stepName< span class = "token punctuation" > ,< / span > requestName< / span > < span class = "token punctuation" > )< / span > < span class = "token punctuation" > {< / span >
< span class = "token keyword" > if< / span > < span class = "token punctuation" > (< / span > < span class = "token operator" > !< / span > ctx < span class = "token operator" > ||< / span > < span class = "token operator" > !< / span > stepName < span class = "token operator" > ||< / span > < span class = "token operator" > !< / span > requestName< span class = "token punctuation" > )< / span > < span class = "token punctuation" > {< / span >
< span class = "token keyword" > return< / span > < span class = "token punctuation" > {< / span > < span class = "token punctuation" > }< / span > < span class = "token punctuation" > ;< / span >
< span class = "token punctuation" > }< / span >
< span class = "token keyword" > if< / span > < span class = "token punctuation" > (< / span > < span class = "token operator" > !< / span > ctx< span class = "token punctuation" > [< / span > stepName< span class = "token punctuation" > ]< / span > < span class = "token operator" > ||< / span > < span class = "token operator" > !< / span > ctx< span class = "token punctuation" > [< / span > stepName< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > [< / span > < span class = "token string" > 'requests'< / span > < span class = "token punctuation" > ]< / span > < span class = "token operator" > ||< / span > < span class = "token operator" > !< / span > ctx< span class = "token punctuation" > [< / span > stepName< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > [< / span > < span class = "token string" > 'requests'< / span > < span class = "token punctuation" > ]< / span > < span class = "token punctuation" > [< / span > requestName< span class = "token punctuation" > ]< / span > < span class = "token operator" > ||< / span >
< span class = "token operator" > !< / span > ctx< span class = "token punctuation" > [< / span > stepName< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > [< / span > < span class = "token string" > 'requests'< / span > < span class = "token punctuation" > ]< / span > < span class = "token punctuation" > [< / span > requestName< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > [< / span > < span class = "token string" > 'request'< / span > < span class = "token punctuation" > ]< / span > < span class = "token punctuation" > )< / span > < span class = "token punctuation" > {< / span >
< span class = "token keyword" > return< / span > < span class = "token punctuation" > {< / span > < span class = "token punctuation" > }< / span > < span class = "token punctuation" > ;< / span >
< span class = "token punctuation" > }< / span >
< span class = "token keyword" > return< / span > ctx< span class = "token punctuation" > [< / span > stepName< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > [< / span > < span class = "token string" > 'requests'< / span > < span class = "token punctuation" > ]< / span > < span class = "token punctuation" > [< / span > requestName< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > [< / span > < span class = "token string" > 'request'< / span > < span class = "token punctuation" > ]< / span > < span class = "token punctuation" > ;< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token comment" > // 获取上下文步骤中请求接口的响应对象< / span >
< span class = "token function-variable function" > getStepResp< / span > < span class = "token operator" > :< / span > < span class = "token keyword" > function< / span > < span class = "token punctuation" > (< / span > < span class = "token parameter" > ctx< span class = "token punctuation" > ,< / span > stepName< span class = "token punctuation" > ,< / span > requestName< / span > < span class = "token punctuation" > )< / span > < span class = "token punctuation" > {< / span >
< span class = "token keyword" > if< / span > < span class = "token punctuation" > (< / span > < span class = "token operator" > !< / span > ctx < span class = "token operator" > ||< / span > < span class = "token operator" > !< / span > stepName < span class = "token operator" > ||< / span > < span class = "token operator" > !< / span > requestName< span class = "token punctuation" > )< / span > < span class = "token punctuation" > {< / span >
< span class = "token keyword" > return< / span > < span class = "token punctuation" > {< / span > < span class = "token punctuation" > }< / span > < span class = "token punctuation" > ;< / span >
< span class = "token punctuation" > }< / span >
< span class = "token keyword" > if< / span > < span class = "token punctuation" > (< / span > < span class = "token operator" > !< / span > ctx< span class = "token punctuation" > [< / span > stepName< span class = "token punctuation" > ]< / span > < span class = "token operator" > ||< / span > < span class = "token operator" > !< / span > ctx< span class = "token punctuation" > [< / span > stepName< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > [< / span > < span class = "token string" > 'requests'< / span > < span class = "token punctuation" > ]< / span > < span class = "token operator" > ||< / span > < span class = "token operator" > !< / span > ctx< span class = "token punctuation" > [< / span > stepName< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > [< / span > < span class = "token string" > 'requests'< / span > < span class = "token punctuation" > ]< / span > < span class = "token punctuation" > [< / span > requestName< span class = "token punctuation" > ]< / span > < span class = "token operator" > ||< / span >
< span class = "token operator" > !< / span > ctx< span class = "token punctuation" > [< / span > stepName< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > [< / span > < span class = "token string" > 'requests'< / span > < span class = "token punctuation" > ]< / span > < span class = "token punctuation" > [< / span > requestName< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > [< / span > < span class = "token string" > 'response'< / span > < span class = "token punctuation" > ]< / span > < span class = "token punctuation" > )< / span > < span class = "token punctuation" > {< / span >
< span class = "token keyword" > return< / span > < span class = "token punctuation" > {< / span > < span class = "token punctuation" > }< / span > < span class = "token punctuation" > ;< / span >
< span class = "token punctuation" > }< / span >
< span class = "token keyword" > return< / span > ctx< span class = "token punctuation" > [< / span > stepName< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > [< / span > < span class = "token string" > 'requests'< / span > < span class = "token punctuation" > ]< / span > < span class = "token punctuation" > [< / span > requestName< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > [< / span > < span class = "token string" > 'response'< / span > < span class = "token punctuation" > ]< / span > < span class = "token punctuation" > ;< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token comment" > /* *********** private function end *********** */< / span >
< span class = "token comment" > /* *********** input begin ************ */< / span >
< span class = "token comment" > /**
* 获取客户端请求头
* @param {*} ctx 上下文 【必填】
* @param {*} headerName 请求头字段名 【选填】,不传时返回所有请求头
*/< / span >
< span class = "token function-variable function" > getInputReqHeader< / span > < span class = "token operator" > :< / span > < span class = "token keyword" > function< / span > < span class = "token punctuation" > (< / span > < span class = "token parameter" > ctx< span class = "token punctuation" > ,< / span > headerName< / span > < span class = "token punctuation" > )< / span > < span class = "token punctuation" > {< / span >
< span class = "token keyword" > var< / span > req < span class = "token operator" > =< / span > < span class = "token keyword" > this< / span > < span class = "token punctuation" > .< / span > < span class = "token function" > getInputReq< / span > < span class = "token punctuation" > (< / span > ctx< span class = "token punctuation" > )< / span > < span class = "token punctuation" > ;< / span >
< span class = "token keyword" > var< / span > headers < span class = "token operator" > =< / span > req< span class = "token punctuation" > [< / span > < span class = "token string" > 'headers'< / span > < span class = "token punctuation" > ]< / span > < span class = "token operator" > ||< / span > < span class = "token punctuation" > {< / span > < span class = "token punctuation" > }< / span > < span class = "token punctuation" > ;< / span >
< span class = "token keyword" > return< / span > headerName < span class = "token operator" > ?< / span > headers< span class = "token punctuation" > [< / span > headerName< span class = "token punctuation" > ]< / span > < span class = "token operator" > :< / span > headers< span class = "token punctuation" > ;< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token comment" > /**
* 获取客户端URL请求参数( query string)
* @param {*} ctx 上下文 【必填】
* @param {*} paramName URL参数名 【选填】,不传时返回所有请求参数
*/< / span >
< span class = "token function-variable function" > getInputReqParam< / span > < span class = "token operator" > :< / span > < span class = "token keyword" > function< / span > < span class = "token punctuation" > (< / span > < span class = "token parameter" > ctx< span class = "token punctuation" > ,< / span > paramName< / span > < span class = "token punctuation" > )< / span > < span class = "token punctuation" > {< / span >
< span class = "token keyword" > var< / span > req < span class = "token operator" > =< / span > < span class = "token keyword" > this< / span > < span class = "token punctuation" > .< / span > < span class = "token function" > getInputReq< / span > < span class = "token punctuation" > (< / span > ctx< span class = "token punctuation" > )< / span > < span class = "token punctuation" > ;< / span >
< span class = "token keyword" > var< / span > params < span class = "token operator" > =< / span > req< span class = "token punctuation" > [< / span > < span class = "token string" > 'params'< / span > < span class = "token punctuation" > ]< / span > < span class = "token operator" > ||< / span > < span class = "token punctuation" > {< / span > < span class = "token punctuation" > }< / span > < span class = "token punctuation" > ;< / span >
< span class = "token keyword" > return< / span > paramName < span class = "token operator" > ?< / span > params< span class = "token punctuation" > [< / span > paramName< span class = "token punctuation" > ]< / span > < span class = "token operator" > :< / span > params< span class = "token punctuation" > ;< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token comment" > /**
* 获取客户端请求体
* @param {*} ctx 上下文 【必填】
* @param {*} field 字段名 【选填】,不传时返回整个请求体
*/< / span >
< span class = "token function-variable function" > getInputReqBody< / span > < span class = "token operator" > :< / span > < span class = "token keyword" > function< / span > < span class = "token punctuation" > (< / span > < span class = "token parameter" > ctx< span class = "token punctuation" > ,< / span > field< / span > < span class = "token punctuation" > )< / span > < span class = "token punctuation" > {< / span >
< span class = "token keyword" > var< / span > req < span class = "token operator" > =< / span > < span class = "token keyword" > this< / span > < span class = "token punctuation" > .< / span > < span class = "token function" > getInputReq< / span > < span class = "token punctuation" > (< / span > ctx< span class = "token punctuation" > )< / span > < span class = "token punctuation" > ;< / span >
< span class = "token keyword" > var< / span > body < span class = "token operator" > =< / span > req< span class = "token punctuation" > [< / span > < span class = "token string" > 'body'< / span > < span class = "token punctuation" > ]< / span > < span class = "token operator" > ||< / span > < span class = "token punctuation" > {< / span > < span class = "token punctuation" > }< / span > < span class = "token punctuation" > ;< / span >
< span class = "token keyword" > return< / span > field < span class = "token operator" > ?< / span > body< span class = "token punctuation" > [< / span > field< span class = "token punctuation" > ]< / span > < span class = "token operator" > :< / span > body< span class = "token punctuation" > ;< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token comment" > /**
* 获取返回给客户端的响应头
* @param {*} ctx 上下文 【必填】
* @param {*} headerName 响应头字段名 【选填】,不传时返回所有响应头
*/< / span >
< span class = "token function-variable function" > getInputRespHeader< / span > < span class = "token operator" > :< / span > < span class = "token keyword" > function< / span > < span class = "token punctuation" > (< / span > < span class = "token parameter" > ctx< span class = "token punctuation" > ,< / span > headerName< / span > < span class = "token punctuation" > )< / span > < span class = "token punctuation" > {< / span >
< span class = "token keyword" > var< / span > req < span class = "token operator" > =< / span > < span class = "token keyword" > this< / span > < span class = "token punctuation" > .< / span > < span class = "token function" > getInputReq< / span > < span class = "token punctuation" > (< / span > ctx< span class = "token punctuation" > )< / span > < span class = "token punctuation" > ;< / span >
< span class = "token keyword" > var< / span > headers < span class = "token operator" > =< / span > req< span class = "token punctuation" > [< / span > < span class = "token string" > 'headers'< / span > < span class = "token punctuation" > ]< / span > < span class = "token operator" > ||< / span > < span class = "token punctuation" > {< / span > < span class = "token punctuation" > }< / span > < span class = "token punctuation" > ;< / span >
< span class = "token keyword" > return< / span > headerName < span class = "token operator" > ?< / span > headers< span class = "token punctuation" > [< / span > headerName< span class = "token punctuation" > ]< / span > < span class = "token operator" > :< / span > headers< span class = "token punctuation" > ;< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token comment" > /**
* 获取返回给客户端的响应体
* @param {*} ctx 上下文 【必填】
* @param {*} field 字段名 【选填】,不传时返回整个响应体
*/< / span >
< span class = "token function-variable function" > getInputRespBody< / span > < span class = "token operator" > :< / span > < span class = "token keyword" > function< / span > < span class = "token punctuation" > (< / span > < span class = "token parameter" > ctx< span class = "token punctuation" > ,< / span > field< / span > < span class = "token punctuation" > )< / span > < span class = "token punctuation" > {< / span >
< span class = "token keyword" > var< / span > req < span class = "token operator" > =< / span > < span class = "token keyword" > this< / span > < span class = "token punctuation" > .< / span > < span class = "token function" > getInputReq< / span > < span class = "token punctuation" > (< / span > ctx< span class = "token punctuation" > )< / span > < span class = "token punctuation" > ;< / span >
< span class = "token keyword" > var< / span > body < span class = "token operator" > =< / span > req< span class = "token punctuation" > [< / span > < span class = "token string" > 'body'< / span > < span class = "token punctuation" > ]< / span > < span class = "token operator" > ||< / span > < span class = "token punctuation" > {< / span > < span class = "token punctuation" > }< / span > < span class = "token punctuation" > ;< / span >
< span class = "token keyword" > return< / span > field < span class = "token operator" > ?< / span > body< span class = "token punctuation" > [< / span > field< span class = "token punctuation" > ]< / span > < span class = "token operator" > :< / span > body< span class = "token punctuation" > ;< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token comment" > /* *********** input begin ************ */< / span >
< span class = "token comment" > /* *********** step request begin ************ */< / span >
< span class = "token comment" > /**
* 获取步骤中调用的接口的请求头
* @param {*} ctx 上下文 【必填】
* @param {*} stepName 步骤名【必填】
* @param {*} requestName 请求的接口名 【必填】
* @param {*} headerName 请求头字段名 【选填】,不传时返回所有请求头
*/< / span >
< span class = "token function-variable function" > getStepReqHeader< / span > < span class = "token operator" > :< / span > < span class = "token keyword" > function< / span > < span class = "token punctuation" > (< / span > < span class = "token parameter" > ctx< span class = "token punctuation" > ,< / span > stepName< span class = "token punctuation" > ,< / span > requestName< span class = "token punctuation" > ,< / span > headerName< / span > < span class = "token punctuation" > )< / span > < span class = "token punctuation" > {< / span >
< span class = "token keyword" > var< / span > req < span class = "token operator" > =< / span > < span class = "token keyword" > this< / span > < span class = "token punctuation" > .< / span > < span class = "token function" > getStepReq< / span > < span class = "token punctuation" > (< / span > ctx< span class = "token punctuation" > ,< / span > stepName< span class = "token punctuation" > ,< / span > requestName< span class = "token punctuation" > )< / span > < span class = "token punctuation" > ;< / span >
< span class = "token keyword" > var< / span > headers < span class = "token operator" > =< / span > req< span class = "token punctuation" > [< / span > < span class = "token string" > 'headers'< / span > < span class = "token punctuation" > ]< / span > < span class = "token operator" > ||< / span > < span class = "token punctuation" > {< / span > < span class = "token punctuation" > }< / span > < span class = "token punctuation" > ;< / span >
< span class = "token keyword" > return< / span > headerName < span class = "token operator" > ?< / span > headers< span class = "token punctuation" > [< / span > headerName< span class = "token punctuation" > ]< / span > < span class = "token operator" > :< / span > headers< span class = "token punctuation" > ;< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token comment" > /**
* 获取步骤中调用的接口的URL参数
* @param {*} ctx 上下文 【必填】
* @param {*} stepName 步骤名【必填】
* @param {*} requestName 请求的接口名 【必填】
* @param {*} paramName URL参数名 【选填】, 不传时返回所有URL参数
*/< / span >
< span class = "token function-variable function" > getStepReqParam< / span > < span class = "token operator" > :< / span > < span class = "token keyword" > function< / span > < span class = "token punctuation" > (< / span > < span class = "token parameter" > ctx< span class = "token punctuation" > ,< / span > stepName< span class = "token punctuation" > ,< / span > requestName< span class = "token punctuation" > ,< / span > paramName< / span > < span class = "token punctuation" > )< / span > < span class = "token punctuation" > {< / span >
< span class = "token keyword" > var< / span > req < span class = "token operator" > =< / span > < span class = "token keyword" > this< / span > < span class = "token punctuation" > .< / span > < span class = "token function" > getStepReq< / span > < span class = "token punctuation" > (< / span > ctx< span class = "token punctuation" > ,< / span > stepName< span class = "token punctuation" > ,< / span > requestName< span class = "token punctuation" > )< / span > < span class = "token punctuation" > ;< / span >
< span class = "token keyword" > var< / span > params < span class = "token operator" > =< / span > req< span class = "token punctuation" > [< / span > < span class = "token string" > 'params'< / span > < span class = "token punctuation" > ]< / span > < span class = "token operator" > ||< / span > < span class = "token punctuation" > {< / span > < span class = "token punctuation" > }< / span > < span class = "token punctuation" > ;< / span >
< span class = "token keyword" > return< / span > paramName < span class = "token operator" > ?< / span > params< span class = "token punctuation" > [< / span > paramName< span class = "token punctuation" > ]< / span > < span class = "token operator" > :< / span > params< span class = "token punctuation" > ;< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token comment" > /**
* 获取步骤中调用的接口的请求体
* @param {*} ctx 上下文 【必填】
* @param {*} stepName 步骤名【必填】
* @param {*} requestName 请求的接口名 【必填】
* @param {*} field 字段名 【选填】,不传时返回整个请求体
*/< / span >
< span class = "token function-variable function" > getStepReqBody< / span > < span class = "token operator" > :< / span > < span class = "token keyword" > function< / span > < span class = "token punctuation" > (< / span > < span class = "token parameter" > ctx< span class = "token punctuation" > ,< / span > stepName< span class = "token punctuation" > ,< / span > requestName< span class = "token punctuation" > ,< / span > field< / span > < span class = "token punctuation" > )< / span > < span class = "token punctuation" > {< / span >
< span class = "token keyword" > var< / span > req < span class = "token operator" > =< / span > < span class = "token keyword" > this< / span > < span class = "token punctuation" > .< / span > < span class = "token function" > getStepReq< / span > < span class = "token punctuation" > (< / span > ctx< span class = "token punctuation" > ,< / span > stepName< span class = "token punctuation" > ,< / span > requestName< span class = "token punctuation" > )< / span > < span class = "token punctuation" > ;< / span >
< span class = "token keyword" > var< / span > body < span class = "token operator" > =< / span > req< span class = "token punctuation" > [< / span > < span class = "token string" > 'body'< / span > < span class = "token punctuation" > ]< / span > < span class = "token operator" > ||< / span > < span class = "token punctuation" > {< / span > < span class = "token punctuation" > }< / span > < span class = "token punctuation" > ;< / span >
< span class = "token keyword" > return< / span > field < span class = "token operator" > ?< / span > body< span class = "token punctuation" > [< / span > field< span class = "token punctuation" > ]< / span > < span class = "token operator" > :< / span > body< span class = "token punctuation" > ;< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token comment" > /**
* 获取步骤中调用的接口的响应头
* @param {*} ctx 上下文 【必填】
* @param {*} stepName 步骤名【必填】
* @param {*} requestName 请求的接口名 【必填】
* @param {*} headerName 响应头字段名 【选填】,不传时返回所有响应头
*/< / span >
< span class = "token function-variable function" > getStepRespHeader< / span > < span class = "token operator" > :< / span > < span class = "token keyword" > function< / span > < span class = "token punctuation" > (< / span > < span class = "token parameter" > ctx< span class = "token punctuation" > ,< / span > stepName< span class = "token punctuation" > ,< / span > requestName< span class = "token punctuation" > ,< / span > headerName< / span > < span class = "token punctuation" > )< / span > < span class = "token punctuation" > {< / span >
< span class = "token keyword" > var< / span > resp < span class = "token operator" > =< / span > < span class = "token keyword" > this< / span > < span class = "token punctuation" > .< / span > < span class = "token function" > getStepResp< / span > < span class = "token punctuation" > (< / span > ctx< span class = "token punctuation" > ,< / span > stepName< span class = "token punctuation" > ,< / span > requestName< span class = "token punctuation" > )< / span > < span class = "token punctuation" > ;< / span >
< span class = "token keyword" > var< / span > headers < span class = "token operator" > =< / span > resp< span class = "token punctuation" > [< / span > < span class = "token string" > 'headers'< / span > < span class = "token punctuation" > ]< / span > < span class = "token operator" > ||< / span > < span class = "token punctuation" > {< / span > < span class = "token punctuation" > }< / span > < span class = "token punctuation" > ;< / span >
< span class = "token keyword" > return< / span > headerName < span class = "token operator" > ?< / span > headers< span class = "token punctuation" > [< / span > headerName< span class = "token punctuation" > ]< / span > < span class = "token operator" > :< / span > headers< span class = "token punctuation" > ;< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token comment" > /**
* 获取步骤中调用的接口的响应头
* @param {*} ctx 上下文 【必填】
* @param {*} stepName 步骤名【必填】
* @param {*} requestName 请求的接口名 【必填】
* @param {*} field 字段名 【选填】,不传时返回整个响应头
*/< / span >
< span class = "token function-variable function" > getStepRespBody< / span > < span class = "token operator" > :< / span > < span class = "token keyword" > function< / span > < span class = "token punctuation" > (< / span > < span class = "token parameter" > ctx< span class = "token punctuation" > ,< / span > stepName< span class = "token punctuation" > ,< / span > requestName< span class = "token punctuation" > ,< / span > field< / span > < span class = "token punctuation" > )< / span > < span class = "token punctuation" > {< / span >
< span class = "token keyword" > var< / span > resp < span class = "token operator" > =< / span > < span class = "token keyword" > this< / span > < span class = "token punctuation" > .< / span > < span class = "token function" > getStepResp< / span > < span class = "token punctuation" > (< / span > ctx< span class = "token punctuation" > ,< / span > stepName< span class = "token punctuation" > ,< / span > requestName< span class = "token punctuation" > )< / span > < span class = "token punctuation" > ;< / span >
< span class = "token keyword" > var< / span > body < span class = "token operator" > =< / span > resp< span class = "token punctuation" > [< / span > < span class = "token string" > 'body'< / span > < span class = "token punctuation" > ]< / span > < span class = "token operator" > ||< / span > < span class = "token punctuation" > {< / span > < span class = "token punctuation" > }< / span > < span class = "token punctuation" > ;< / span >
< span class = "token keyword" > return< / span > field < span class = "token operator" > ?< / span > body< span class = "token punctuation" > [< / span > field< span class = "token punctuation" > ]< / span > < span class = "token operator" > :< / span > body< span class = "token punctuation" > ;< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token comment" > /**
* 获取步骤结果
* @param {*} ctx 上下文 【必填】
* @param {*} stepName 步骤名【必填】
* @param {*} field 字段名 【选填】,不传时返回整个步骤结果对象
*/< / span >
< span class = "token function-variable function" > getStepResult< / span > < span class = "token operator" > :< / span > < span class = "token keyword" > function< / span > < span class = "token punctuation" > (< / span > < span class = "token parameter" > ctx< span class = "token punctuation" > ,< / span > stepName< span class = "token punctuation" > ,< / span > field< / span > < span class = "token punctuation" > )< / span > < span class = "token punctuation" > {< / span >
< span class = "token keyword" > if< / span > < span class = "token punctuation" > (< / span > < span class = "token operator" > !< / span > ctx < span class = "token operator" > ||< / span > < span class = "token operator" > !< / span > stepName < span class = "token operator" > ||< / span > < span class = "token operator" > !< / span > ctx< span class = "token punctuation" > [< / span > stepName< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > )< / span > < span class = "token punctuation" > {< / span >
< span class = "token keyword" > return< / span > < span class = "token punctuation" > {< / span > < span class = "token punctuation" > }< / span > < span class = "token punctuation" > ;< / span >
< span class = "token punctuation" > }< / span >
< span class = "token keyword" > var< / span > result < span class = "token operator" > =< / span > ctx< span class = "token punctuation" > [< / span > stepName< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > [< / span > < span class = "token string" > 'result'< / span > < span class = "token punctuation" > ]< / span > < span class = "token operator" > ||< / span > < span class = "token punctuation" > {< / span > < span class = "token punctuation" > }< / span > < span class = "token punctuation" > ;< / span >
< span class = "token keyword" > return< / span > field < span class = "token operator" > ?< / span > result< span class = "token punctuation" > [< / span > field< span class = "token punctuation" > ]< / span > < span class = "token operator" > :< / span > result< span class = "token punctuation" > ;< / span >
< span class = "token punctuation" > }< / span >
< span class = "token comment" > /* *********** step request end ************ */< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ;< / span >
< / code > < / pre > < / div > < h3 id = "context-js-数据结构" > < a href = "#context-js-数据结构" class = "header-anchor" > #< / a > context.js 数据结构< / h3 > < div class = "language-javascript extra-class" > < pre class = "language-javascript" > < code >
< span class = "token comment" > // 上下文,用于保存客户输入输出和每个步骤的输入与输出结果< / span >
< span class = "token keyword" > var< / span > context < span class = "token operator" > =< / span > < span class = "token punctuation" > {< / span >
< span class = "token comment" > // 是否DEBUG模式< / span >
debug< span class = "token operator" > :< / span > < span class = "token boolean" > false< / span > < span class = "token punctuation" > ,< / span >
< span class = "token comment" > // 各个操作的耗时< / span >
elapsedTimes< span class = "token operator" > :< / span > < span class = "token punctuation" > [< / span > < span class = "token punctuation" > {< / span >
< span class = "token punctuation" > [< / span > actionName< span class = "token punctuation" > ]< / span > < span class = "token operator" > :< / span > < span class = "token number" > 123< / span > < span class = "token punctuation" > ,< / span > < span class = "token comment" > // 操作名称:耗时< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ]< / span > < span class = "token punctuation" > ,< / span >
< span class = "token comment" > // 客户输入和接口的返回结果< / span >
input< span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span >
request< span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span >
path< span class = "token operator" > :< / span > < span class = "token string" > " " < / span > < span class = "token punctuation" > ,< / span >
method< span class = "token operator" > :< / span > < span class = "token string" > " GET/POST" < / span > < span class = "token punctuation" > ,< / span >
headers< span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span > < span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
body< span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span > < span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
params< span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span > < span class = "token punctuation" > }< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
response< span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span > < span class = "token comment" > // 聚合接口的响应< / span >
headers< span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span > < span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
body< span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span > < span class = "token punctuation" > }< / span >
< span class = "token punctuation" > }< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token comment" > // 步骤< / span >
step1< span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span >
requests< span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span >
< span class = "token comment" > // 接口1< / span >
request1< span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span >
< span class = "token comment" > // 请求相关参数< / span >
request< span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span >
url< span class = "token operator" > :< / span > < span class = "token string" > " " < / span > < span class = "token punctuation" > ,< / span >
method< span class = "token operator" > :< / span > < span class = "token string" > " GET/POST" < / span > < span class = "token punctuation" > ,< / span >
headers< span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span > < span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
body< span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span > < span class = "token punctuation" > }< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token comment" > // 根据转换规则转换后的接口响应< / span >
response< span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span >
headers< span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span > < span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
body< span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span > < span class = "token punctuation" > }< / span >
< span class = "token punctuation" > }< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token comment" > // 接口2< / span >
request2< span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span >
request< span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span >
url< span class = "token operator" > :< / span > < span class = "token string" > " " < / span > < span class = "token punctuation" > ,< / span >
method< span class = "token operator" > :< / span > < span class = "token string" > " GET/POST" < / span > < span class = "token punctuation" > ,< / span >
headers< span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span > < span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
body< span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span > < span class = "token punctuation" > }< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
response< span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span >
headers< span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span > < span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
body< span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span > < span class = "token punctuation" > }< / span >
< span class = "token punctuation" > }< / span >
< span class = "token punctuation" > }< / span >
< span class = "token comment" > //...< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token comment" > // 步骤结果< / span >
result< span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span > < span class = "token punctuation" > }< / span >
< span class = "token punctuation" > }< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ;< / span >
2020-11-24 18:08:25 +08:00
< / code > < / pre > < / div > < h2 id = "抛出异常" > < a href = "#抛出异常" class = "header-anchor" > #< / a > 抛出异常< / h2 > < p > 当要在脚本里中止请求时可以通过以下方式来实现< / p > < p > < img src = "/aggr_config_exception.png" alt = "" > < / p > < p > 返回一个对象且这个对象包含一个_stopAndResponse等于true的属性, Fizz会终止后续的操作并把这个对象返回给调用方。< / p > < h2 id = "重定向" > < a href = "#重定向" class = "header-anchor" > #< / a > 重定向< / h2 > < p > 通过脚本可以实现重定向, 脚本返回一个对象且这个对象同时包含_stopAndResponse=true和_redirectUrl属性,_redirectUrl的值为重定向的目标URL, Fizz会终止后续的操作并进行重定向。JavaScript脚本样例如下: < / p > < p > < img src = "/aggr_config_redirect.png" alt = "" > < / p > < h2 id = "配置路由" > < a href = "#配置路由" class = "header-anchor" > #< / a > 配置路由< / h2 > < p > 至此服务编排的接口配置完成,但此时还不能通过网关访问接口,需要到网关管理-路由管理里配置路由< / p > < p > < img src = "/aggr_config_route.png" alt = "" > < / p > < h2 id = "在线测试" > < a href = "#在线测试" class = "header-anchor" > #< / a > 在线测试< / h2 > < p > < img src = "/aggr_config_test.png" alt = "" > < / p > < ul > < li > 支持在线实时测试< / li > < li > 支持测试接口和正式接口隔离< / li > < li > 支持返回上下文,可以查看整个执行过程中各个步骤及请求的输入与输出< / li > < li > 支持保存历史测试记录< / li > < / ul > < p > < img src = "/aggr_config_test2.png" alt = "" > < / p > < p > 支持调试模式,在测试接口和正式接口均可使用,修改后重新发布可实时生效,在调试模式下会打印请求日志及报文,主要用于排查线上问题< / p > < h2 id = "脚本执行异常" > < a href = "#脚本执行异常" class = "header-anchor" > #< / a > 脚本执行异常< / h2 > < p > 当脚本执行异常时context里会记录异常信息< / p > < ul > < li > exceptionMessage 异常信息< / li > < li > exceptionStacks 异常堆栈信息< / li > < li > exceptionData 引起异常的脚本数据< / li > < / ul > < div class = "language-javascript extra-class" > < pre class = "language-javascript" > < code > < span class = "token comment" > // 上下文数据结构设计< / span >
< span class = "token comment" > // 上下文,用于保存客户输入输出和每个步骤的输入与输出结果< / span >
< span class = "token keyword" > var< / span > context < span class = "token operator" > =< / span > < span class = "token punctuation" > {< / span >
< span class = "token comment" > // 是否DEBUG模式< / span >
debug< span class = "token operator" > :< / span > < span class = "token boolean" > false< / span > < span class = "token punctuation" > ,< / span >
< span class = "token comment" > // exception info< / span >
exceptionMessage< span class = "token operator" > :< / span > < span class = "token string" > " " < / span > < span class = "token punctuation" > ,< / span >
exceptionStacks< span class = "token operator" > :< / span > < span class = "token string" > " " < / span > < span class = "token punctuation" > ,< / span >
exceptionData< span class = "token operator" > :< / span > < span class = "token string" > " " < / span > < span class = "token punctuation" > ,< / span > < span class = "token comment" > // such as script source code that cause exception< / span >
< span class = "token comment" > // ... other fields< / span >
< span class = "token punctuation" > }< / span >
< / code > < / pre > < / div > < p > 在请求里加上returnContext=true可以返回context上下文, 异常信息样例: < / p > < p > < img src = "/aggr_config_exception2.png" alt = "" > < / p > < h2 id = "导入导出" > < a href = "#导入导出" class = "header-anchor" > #< / a > 导入导出< / h2 > < p > < img src = "/aggr_config_import_export.png" alt = "" > < / p > < p > 导入导出主要用于在各个环境间同步接口配置,在开发环境配置好后导到测试环境中测试,测试完后导到生产环境进行发布< / p > < h2 id = "发布-下线和审核" > < a href = "#发布-下线和审核" class = "header-anchor" > #< / a > 发布|下线和审核< / h2 > < p > < img src = "/aggr_release_1.png" alt = "" > < / p > < p > < img src = "/aggr_release_2.png" alt = "" > < / p > < p > 目前发布|下线申请有以上两个入口。< / p > < p > < img src = "/aggr_release_rollback1.png" alt = "" > < / p > < p > < img src = "/aggr_release_rollback.png" alt = "" > < / p > < ul > < li > 批量发布:对发布单里的接口进行批量发布< / li > < li > 批量回滚:对发布单里的接口进行批量回滚< / li > < li > 发布:实时发布到网关< / li > < li > 回滚:支持回滚到历史任何一个版本,可在发布历史里指定一个版本进行回滚< / li > < li > 下线:从网关删除接口,在后台可以通过发布功能再次上线< / li > < / ul > < h3 id = "发布流程说明" > < a href = "#发布流程说明" class = "header-anchor" > #< / a > 发布流程说明< / h3 > < p > 申请发布、审核、发布和下线功能的权限可根据需要灵活分配给不同角色,如:开发人员只能申请发布,上级领导审核,运维或测试人员执行发布、回滚或下线。在开发、测试和预生产环境为了方便开发人员调试也可把申请发布、审核、发布和下线功能都分配给开发人员。< / p > < / div > < footer class = "page-edit" > <!-- --> < div class = "last-updated" > < span class = "prefix" > 上次更新:< / span > < span class = "time" > 2020-11-24 18:2< / span > < / div > < / footer > < div class = "page-nav" > < p class = "inner" > < span class = "prev" >
2020-09-09 14:42:18 +08:00
←
2020-11-09 11:57:42 +08:00
< a href = "/guide/aggregate/overview.html" class = "prev" >
2020-09-09 14:42:18 +08:00
步骤总览
2020-11-09 11:57:42 +08:00
< / a > < / span > < span class = "next" > < a href = "/guide/plugin/" >
2020-09-09 14:42:18 +08:00
插件开发
< / a >
→
< / span > < / p > < / div > < / main > < / div > < div class = "global-ui" > < / div > < / div >
2020-11-24 18:08:25 +08:00
< script src = "/assets/js/app.307fd529.js" defer > < / script > < script src = "/assets/js/2.5b001851.js" defer > < / script > < script src = "/assets/js/9.6a35b918.js" defer > < / script >
2020-09-09 14:42:18 +08:00
< / body >
< / html >