307 lines
58 KiB
HTML
307 lines
58 KiB
HTML
<!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="">
|
||
<link rel="preload" href="/assets/css/0.styles.34d67128.css" as="style"><link rel="preload" href="/assets/js/app.86b5ae26.js" as="script"><link rel="preload" href="/assets/js/2.5b001851.js" as="script"><link rel="preload" href="/assets/js/9.9eb9244c.js" as="script"><link rel="prefetch" href="/assets/js/10.b57afcaa.js"><link rel="prefetch" href="/assets/js/11.21242c7f.js"><link rel="prefetch" href="/assets/js/12.61089982.js"><link rel="prefetch" href="/assets/js/13.fdb2bea3.js"><link rel="prefetch" href="/assets/js/14.62d9a88b.js"><link rel="prefetch" href="/assets/js/15.0358b10e.js"><link rel="prefetch" href="/assets/js/16.43a475d2.js"><link rel="prefetch" href="/assets/js/17.32fa8ea0.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.5b796ecf.js"><link rel="prefetch" href="/assets/js/24.72fe0b8b.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.cdddd7aa.js"><link rel="prefetch" href="/assets/js/29.60b7285b.js"><link rel="prefetch" href="/assets/js/3.a51774e3.js"><link rel="prefetch" href="/assets/js/30.0222f21c.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.e883523c.js"><link rel="prefetch" href="/assets/js/7.00dd2642.js"><link rel="prefetch" href="/assets/js/8.645ad4e8.js">
|
||
<link rel="stylesheet" href="/assets/css/0.styles.34d67128.css">
|
||
</head>
|
||
<body>
|
||
<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">
|
||
首页
|
||
</a></div><div class="nav-item"><a href="/guide/intro/" class="nav-link">
|
||
使用文档
|
||
</a></div> <a href="https://github.com/wehotel/fizz-gateway-community" target="_blank" rel="noopener noreferrer" class="repo-link">
|
||
查看源码
|
||
<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">
|
||
首页
|
||
</a></div><div class="nav-item"><a href="/guide/intro/" class="nav-link">
|
||
使用文档
|
||
</a></div> <a href="https://github.com/wehotel/fizz-gateway-community" target="_blank" rel="noopener noreferrer" class="repo-link">
|
||
查看源码
|
||
<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">脚本</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></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/plugin/" class="sidebar-link">插件开发</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/guide/plugin/#概述" class="sidebar-link">概述</a></li><li class="sidebar-sub-header"><a href="/guide/plugin/#gateway开发" class="sidebar-link">gateway开发</a></li><li class="sidebar-sub-header"><a href="/guide/plugin/#manager配置" class="sidebar-link">manager配置</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/benchmark/" class="sidebar-link">benchmark</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/guide/benchmark/#基准测试结果" class="sidebar-link">基准测试结果</a></li><li class="sidebar-sub-header"><a href="/guide/benchmark/#基准测试详情" class="sidebar-link">基准测试详情</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/guide/benchmark/#硬件环境" class="sidebar-link">硬件环境</a></li><li class="sidebar-sub-header"><a href="/guide/benchmark/#压测工具" class="sidebar-link">压测工具</a></li><li class="sidebar-sub-header"><a href="/guide/benchmark/#压测结果截图" class="sidebar-link">压测结果截图</a></li></ul></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/manager/manager_overview.html" class="sidebar-link">管理后台简介</a></li><li><a href="/guide/manager/manager_gateway_group.html" class="sidebar-link">网关分组</a></li><li><a href="/guide/manager/manager_plugin.html" class="sidebar-link">插件管理</a></li><li><a href="/guide/manager/manager_app_id.html" class="sidebar-link">appID管理</a></li><li><a href="/guide/manager/manager_api_auth.html" class="sidebar-link">路由管理</a></li><li><a href="/guide/manager/manager_service.html" class="sidebar-link">服务管理</a></li><li><a href="/guide/manager/manager_aggregate.html" class="sidebar-link">接口列表</a></li><li><a href="/guide/manager/manager_aggregate_op_log.html" class="sidebar-link">操作日志</a></li><li><a href="/guide/manager/manager_gateway_aggregate_cache.html" class="sidebar-link">网关缓存</a></li><li><a href="/guide/manager/manager_aggregate_my_apply.html" class="sidebar-link">我的申请</a></li><li><a href="/guide/manager/manager_aggregate_approve.html" class="sidebar-link">待审核</a></li><li><a href="/guide/manager/manager_aggregate_approve_op_log.html" class="sidebar-link">审核日志</a></li><li><a href="/guide/manager/manager_role.html" class="sidebar-link">角色管理</a></li><li><a href="/guide/manager/manager_user.html" class="sidebar-link">用户管理</a></li></ul></section></li></ul> </aside> <main class="page"> <div class="theme-default-content content__default"><h2 id="创建服务"><a href="#创建服务" class="header-anchor">#</a> 创建服务</h2> <p><img src="/aggr_newservice.png" alt=""></p> <h2 id="创建聚合接口"><a href="#创建聚合接口" class="header-anchor">#</a> 创建聚合接口</h2> <p><img src="/aggr_newapi0.png" alt=""> <img src="/aggr_newapi.png" alt=""></p> <h2 id="配置输入"><a href="#配置输入" class="header-anchor">#</a> 配置输入</h2> <p><img src="/aggr_config_input.png" alt=""></p> <ul><li>配置输入的定义包括3部分:请求头、请求体和Query参数</li> <li>基于JSON Schema规范</li> <li>自带校验规则</li> <li>支持自定义脚本实现复杂的逻辑校验</li></ul> <p>JSON Schema规范,详见:</p> <p><a href="http://json-schema.org/specification.html" target="_blank" rel="noopener noreferrer">http://json-schema.org/specification.html<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></p> <p><a href="http://json-schema.org/understanding-json-schema/" target="_blank" rel="noopener noreferrer">http://json-schema.org/understanding-json-schema/<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></p> <h2 id="配置校验结果"><a href="#配置校验结果" class="header-anchor">#</a> 配置校验结果</h2> <p><img src="/aggr_config_input_validate_result.png" alt=""></p> <ul><li>校验不通过时,Fizz会把校验失败的原因(如:订单ID不能为空)放到上下文的validateMsg字段里</li> <li>可以自定义返回给调用方的报文格式,如 msgCode, message</li> <li>支持自定义响应头</li> <li>支持自定义脚本处理校验结果</li></ul> <h2 id="配置步骤"><a href="#配置步骤" class="header-anchor">#</a> 配置步骤</h2> <h3 id="配置步骤的基础信息"><a href="#配置步骤的基础信息" class="header-anchor">#</a> 配置步骤的基础信息</h3> <p><img src="/aggr_config_step1.png" alt=""></p> <h3 id="配置步骤的接口入出参"><a href="#配置步骤的接口入出参" class="header-anchor">#</a> 配置步骤的接口入出参</h3> <p><img src="/aggr_config_step2.png" alt=""></p> <h3 id="步骤说明"><a href="#步骤说明" class="header-anchor">#</a> 步骤说明</h3> <ul><li>一个聚合接口可包含多个步骤</li> <li>一个步骤可包含多个请求(即调用多个接口)</li> <li>步骤间是串联顺序执行</li> <li>一个步骤内的多个请求并行执行</li></ul> <h3 id="数据转换"><a href="#数据转换" class="header-anchor">#</a> 数据转换</h3> <p>支持配置固定值,引用值和脚本</p> <h4 id="固定值"><a href="#固定值" class="header-anchor">#</a> 固定值</h4> <p><img src="/aggr_config_step_mapping_1.png" alt=""></p> <h4 id="引用值"><a href="#引用值" class="header-anchor">#</a> 引用值</h4> <p><img src="/aggr_config_step_mapping_2.png" alt=""></p> <h4 id="脚本"><a href="#脚本" class="header-anchor">#</a> 脚本</h4> <p><img src="/aggr_config_step_mapping_3.png" alt=""></p> <p><img src="/aggr_config_step_mapping_4.png" alt=""></p> <h4 id="星号"><a href="#星号" class="header-anchor">#</a> 星号 *</h4> <p>星号通配符可以接收一个返回对象类型的引用值,返回对象里的字段会合并到目标对象里</p> <p><img src="/aggr_config_step_mapping_5.png" alt=""></p> <p>样例:userInfo = {"userName": "Fizz", "userID": 1234}</p> <h4 id="优先级与覆盖顺序"><a href="#优先级与覆盖顺序" class="header-anchor">#</a> 优先级与覆盖顺序</h4> <p>固定值 < 引用值 < 脚本 < 星号*</p> <p>当一个字段配置了多种类型的值时按以上顺序覆盖,星号优先级最高</p> <h4 id="引用值规范"><a href="#引用值规范" class="header-anchor">#</a> 引用值规范</h4> <div class="language-properties extra-class"><pre class="language-properties"><code><span class="token comment"># 获取入参请求头aaa的值</span>
|
||
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
|
||
|
||
</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">/**
|
||
* 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>
|
||
|
||
</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>至此服务编排的接口配置完成,但此时还不能通过网关访问接口,需要到网关管理-路由管理里配置路由</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><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-9 11:50</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
|
||
←
|
||
<a href="/guide/aggregate/overview.html" class="prev">
|
||
步骤总览
|
||
</a></span> <span class="next"><a href="/guide/plugin/">
|
||
插件开发
|
||
</a>
|
||
→
|
||
</span></p></div> </main></div><div class="global-ui"></div></div>
|
||
<script src="/assets/js/app.86b5ae26.js" defer></script><script src="/assets/js/2.5b001851.js" defer></script><script src="/assets/js/9.9eb9244c.js" defer></script>
|
||
</body>
|
||
</html>
|