Files
fizz-gateway-node/docs/guide/manager/manager_aggregate.html

144 lines
54 KiB
HTML
Raw Normal View History

2020-10-27 15:45:29 +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-09 10:11:25 +08:00
<link rel="preload" href="/fizz-gateway-community/assets/css/0.styles.233b9b7b.css" as="style"><link rel="preload" href="/fizz-gateway-community/assets/js/app.41e48030.js" as="script"><link rel="preload" href="/fizz-gateway-community/assets/js/2.5b001851.js" as="script"><link rel="preload" href="/fizz-gateway-community/assets/js/14.993243d3.js" as="script"><link rel="prefetch" href="/fizz-gateway-community/assets/js/10.ddbb0d4d.js"><link rel="prefetch" href="/fizz-gateway-community/assets/js/11.93c9bc98.js"><link rel="prefetch" href="/fizz-gateway-community/assets/js/12.f815cfa2.js"><link rel="prefetch" href="/fizz-gateway-community/assets/js/13.e5742833.js"><link rel="prefetch" href="/fizz-gateway-community/assets/js/15.c6e43d45.js"><link rel="prefetch" href="/fizz-gateway-community/assets/js/16.5d8d970e.js"><link rel="prefetch" href="/fizz-gateway-community/assets/js/17.31216161.js"><link rel="prefetch" href="/fizz-gateway-community/assets/js/18.1301a626.js"><link rel="prefetch" href="/fizz-gateway-community/assets/js/19.501fe444.js"><link rel="prefetch" href="/fizz-gateway-community/assets/js/20.94c02b34.js"><link rel="prefetch" href="/fizz-gateway-community/assets/js/21.ff5e068c.js"><link rel="prefetch" href="/fizz-gateway-community/assets/js/22.1f3d545e.js"><link rel="prefetch" href="/fizz-gateway-community/assets/js/23.e4fc3148.js"><link rel="prefetch" href="/fizz-gateway-community/assets/js/24.7e82030a.js"><link rel="prefetch" href="/fizz-gateway-community/assets/js/25.fc38ae5b.js"><link rel="prefetch" href="/fizz-gateway-community/assets/js/26.e097ebfd.js"><link rel="prefetch" href="/fizz-gateway-community/assets/js/27.06f8de31.js"><link rel="prefetch" href="/fizz-gateway-community/assets/js/28.9b7b0400.js"><link rel="prefetch" href="/fizz-gateway-community/assets/js/29.214a2702.js"><link rel="prefetch" href="/fizz-gateway-community/assets/js/3.a51774e3.js"><link rel="prefetch" href="/fizz-gateway-community/assets/js/30.0222f21c.js"><link rel="prefetch" href="/fizz-gateway-community/assets/js/4.7d5f245c.js"><link rel="prefetch" href="/fizz-gateway-community/assets/js/5.abc10683.js"><link rel="prefetch" href="/fizz-gateway-community/assets/js/6.b5dc0bcc.js"><link rel="prefetch" href="/fizz-gateway-community/assets/js/7.c27e364c.js"><link rel="prefetch" href="/fizz-gateway-community/assets/js/8.99888a6b.js"><link rel="prefetch" href="/fizz-gateway-community/assets/js/9.3d56fa0d.js">
2020-10-27 15:45:29 +08:00
<link rel="stylesheet" href="/fizz-gateway-community/assets/css/0.styles.233b9b7b.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="/fizz-gateway-community/" 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="/fizz-gateway-community/" class="nav-link">
首页
</a></div><div class="nav-item"><a href="/fizz-gateway-community/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="/fizz-gateway-community/" class="nav-link">
首页
</a></div><div class="nav-item"><a href="/fizz-gateway-community/guide/intro/" class="nav-link">
使用文档
</a></div> <a href="https://github.com/wehotel/fizz-gateway-community" target="_blank" rel="noopener noreferrer" class="repo-link">
查看源码
2020-11-09 10:11: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="/fizz-gateway-community/guide/intro/" class="sidebar-link">什么是Fizz网关</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/fizz-gateway-community/guide/intro/#什么是fizz网关" class="sidebar-link">什么是Fizz网关</a></li><li class="sidebar-sub-header"><a href="/fizz-gateway-community/guide/intro/#fizz的设计" class="sidebar-link">Fizz的设计</a></li><li class="sidebar-sub-header"><a href="/fizz-gateway-community/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="/fizz-gateway-community/guide/installation/" class="sidebar-link">安装</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/fizz-gateway-community/guide/installation/#安装依赖" class="sidebar-link">安装依赖</a></li><li class="sidebar-sub-header"><a href="/fizz-gateway-community/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="/fizz-gateway-community/guide/proxy/" class="sidebar-link">路由转发</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/fizz-gateway-community/guide/proxy/#路由转发介绍" class="sidebar-link">路由转发介绍</a></li><li class="sidebar-sub-header"><a href="/fizz-gateway-community/guide/proxy/#接入路由转发" 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="/fizz-gateway-community/guide/aggregate/" class="sidebar-link">服务编排介绍</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/fizz-gateway-community/guide/aggregate/#什么是服务编排" class="sidebar-link">什么是服务编排</a></li><li class="sidebar-sub-header"><a href="/fizz-gateway-community/guide/aggregate/#举例说明" class="sidebar-link">举例说明</a></li><li class="sidebar-sub-header"><a href="/fizz-gateway-community/guide/aggregate/#服务编排架构" class="sidebar-link">服务编排架构</a></li><li class="sidebar-sub-header"><a href="/fizz-gateway-community/guide/aggregate/#适用场景" class="sidebar-link">适用场景</a></li></ul></li><li><a href="/fizz-gateway-community/guide/aggregate/overview.html" class="sidebar-link">步骤总览</a></li><li><a href="/fizz-gateway-community/guide/aggregate/configuration.html" class="sidebar-link">服务编排配置</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/fizz-gateway-community/guide/aggregate/configuration.html#创建服务" class="sidebar-link">创建服务</a></li><li class="sidebar-sub-header"><a href="/fizz-gateway-community/guide/aggregate/configuration.html#创建聚合接口" class="sidebar-link">创建聚合接口</a></li><li class="sidebar-sub-header"><a href="/fizz-gateway-community/guide/aggregate/configuration.html#配置输入" class="sidebar-link">配置输入</a></li><li class="sidebar-sub-header"><a href="/fizz-gateway-community/guide/aggregate/configuration.html#配置<E9858D>
2020-10-27 15:45:29 +08:00
</code></pre></div></li> <li>array:<div class="language-javascript extra-class"><pre class="language-javascript"><code><span class="token punctuation">[</span> <span class="token string">&quot;first&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;second&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;third&quot;</span> <span class="token punctuation">]</span>
</code></pre></div></li> <li>number:<div class="language-javascript extra-class"><pre class="language-javascript"><code><span class="token number">42</span>
<span class="token number">3.1415926</span>
</code></pre></div></li> <li>string:<div class="language-javascript extra-class"><pre class="language-javascript"><code><span class="token string">&quot;This is a string&quot;</span>
</code></pre></div></li> <li>boolean:<div class="language-javascript extra-class"><pre class="language-javascript"><code><span class="token boolean">true</span>
<span class="token boolean">false</span>
</code></pre></div></li> <li>null:<div class="language-javascript extra-class"><pre class="language-javascript"><code><span class="token keyword">null</span>
</code></pre></div></li></ul> <p>通过以上的简单数据类型,就能构造复杂的结构化数据了。下面举两个例子:</p> <div class="language-javascript extra-class"><pre class="language-javascript"><code><span class="token punctuation">{</span>
<span class="token string">&quot;name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;George Washington&quot;</span><span class="token punctuation">,</span>
<span class="token string">&quot;birthday&quot;</span><span class="token operator">:</span> <span class="token string">&quot;February 22, 1732&quot;</span><span class="token punctuation">,</span>
<span class="token string">&quot;address&quot;</span><span class="token operator">:</span> <span class="token string">&quot;Mount Vernon, Virginia, United States&quot;</span>
<span class="token punctuation">}</span>
</code></pre></div><div class="language-javascript extra-class"><pre class="language-javascript"><code><span class="token punctuation">{</span>
<span class="token string">&quot;first_name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;George&quot;</span><span class="token punctuation">,</span>
<span class="token string">&quot;last_name&quot;</span><span class="token operator">:</span> <span class="token string">&quot;Washington&quot;</span><span class="token punctuation">,</span>
<span class="token string">&quot;birthday&quot;</span><span class="token operator">:</span> <span class="token string">&quot;1732-02-22&quot;</span><span class="token punctuation">,</span>
<span class="token string">&quot;address&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token string">&quot;street_address&quot;</span><span class="token operator">:</span> <span class="token string">&quot;3200 Mount Vernon Memorial Highway&quot;</span><span class="token punctuation">,</span>
<span class="token string">&quot;city&quot;</span><span class="token operator">:</span> <span class="token string">&quot;Mount Vernon&quot;</span><span class="token punctuation">,</span>
<span class="token string">&quot;state&quot;</span><span class="token operator">:</span> <span class="token string">&quot;Virginia&quot;</span><span class="token punctuation">,</span>
<span class="token string">&quot;country&quot;</span><span class="token operator">:</span> <span class="token string">&quot;United States&quot;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre></div><p>以上两个例子都是有效的JSON数据包含一样的有效信息但是当程序读取数据时需要准确的知道数据是怎么组织的比如哪些字段是必须这些字段是什么类型。这时候JSON Schema就派上用场了看以下JSON Schema例子</p> <div class="language-javascript extra-class"><pre class="language-javascript"><code><span class="token punctuation">{</span>
<span class="token string">&quot;type&quot;</span><span class="token operator">:</span> <span class="token string">&quot;object&quot;</span><span class="token punctuation">,</span>
<span class="token string">&quot;properties&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token string">&quot;first_name&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token string">&quot;type&quot;</span><span class="token operator">:</span> <span class="token string">&quot;string&quot;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token string">&quot;last_name&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token string">&quot;type&quot;</span><span class="token operator">:</span> <span class="token string">&quot;string&quot;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token string">&quot;birthday&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token string">&quot;type&quot;</span><span class="token operator">:</span> <span class="token string">&quot;string&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;format&quot;</span><span class="token operator">:</span> <span class="token string">&quot;date&quot;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token string">&quot;address&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token string">&quot;type&quot;</span><span class="token operator">:</span> <span class="token string">&quot;object&quot;</span><span class="token punctuation">,</span>
<span class="token string">&quot;properties&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token string">&quot;street_address&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token string">&quot;type&quot;</span><span class="token operator">:</span> <span class="token string">&quot;string&quot;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token string">&quot;city&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token string">&quot;type&quot;</span><span class="token operator">:</span> <span class="token string">&quot;string&quot;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token string">&quot;state&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token string">&quot;type&quot;</span><span class="token operator">:</span> <span class="token string">&quot;string&quot;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token string">&quot;country&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token string">&quot;type&quot;</span> <span class="token operator">:</span> <span class="token string">&quot;string&quot;</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><p>用以上JSON Schema验证第一个例子时验证失败但是第二个例子验证通过。</p> <p>JSON Schema本身也是通过JSON编写其本身也是数据不是一个计算机程序只是一种“描述其它数据的结构”的声明格式。这既是长处也是弱点JSON Schema可以简洁地描述数据的结构并且自动验证数据但是对于数据元素间的关系表达就力不能及了。</p></blockquote> <p>更多JSON Schema知识可以阅读<a href="https://json-schema.org/understanding-json-schema/" target="_blank" rel="noopener noreferrer">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> <h4 id="请求头部"><a href="#请求头部" class="header-anchor">#</a> 请求头部</h4> <p>定义聚合接口的请求Header参数。</p> <p><img src="/fizz-gateway-community/manager_aggregate_add_3.png" alt="manager_aggregate_add_3"></p> <p>举个例子:</p> <div class="language-javascript extra-class"><pre class="language-javascript"><code><span class="token punctuation">{</span>
<span class="token string">&quot;type&quot;</span><span class="token operator">:</span> <span class="token string">&quot;object&quot;</span><span class="token punctuation">,</span>
<span class="token string">&quot;properties&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token string">&quot;headerParam1&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token string">&quot;type&quot;</span><span class="token operator">:</span> <span class="token string">&quot;string&quot;</span><span class="token punctuation">,</span>
<span class="token string">&quot;title&quot;</span><span class="token operator">:</span> <span class="token string">&quot;请求头参数1&quot;</span><span class="token punctuation">,</span>
<span class="token string">&quot;titleEn&quot;</span><span class="token operator">:</span> <span class="token string">&quot;headerParam1&quot;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token string">&quot;required&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
<span class="token string">&quot;headerParam1&quot;</span>
<span class="token punctuation">]</span>
<span class="token punctuation">}</span>
</code></pre></div><p>以上例子定义了必传请求头参数<code>headerParam1</code></p> <p><code>title</code>字段用于验证失败时提示使用例如请求接口时没传请求头时会提示“请求头参数1不能为空”错误提示输出通过校验结果配置详情请看后文介绍如图所示。</p> <p><img src="/fizz-gateway-community/manager_aggregate_add_input_header_1.png" alt="manager_aggregate_add_input_header_1"></p> <p>当定义了语言配置(详情请查看后文的语言配置介绍)选项为英文时会使用<code>titleEn</code>字段用于验证失败时提示使用例如请求接口时没传请求头时会提示“headerParam1 is missing but it is required”错误提示输出通过校验结果配置详情请看后文介绍如图所示。</p> <p><img src="/fizz-gateway-community/manager_aggregate_add_input_header_2.png" alt="manager_aggregate_add_input_header_2"></p> <h4 id="请求体"><a href="#请求体" class="header-anchor">#</a> 请求体</h4> <p>定义聚合接口的请求体参数。</p> <p><img src="/fizz-gateway-community/manager_aggregate_add_4.png" alt="manager_aggregate_add_4"></p> <p>举个例子:</p> <div class="language-javascript extra-class"><pre class="language-javascript"><code><span class="token punctuation">{</span>
<span class="token string">&quot;type&quot;</span><span class="token operator">:</span> <span class="token string">&quot;object&quot;</span><span class="token punctuation">,</span>
<span class="token string">&quot;properties&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token string">&quot;bodyParam1&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token string">&quot;type&quot;</span><span class="token operator">:</span> <span class="token string">&quot;string&quot;</span><span class="token punctuation">,</span>
<span class="token string">&quot;title&quot;</span><span class="token operator">:</span> <span class="token string">&quot;请求体参数1&quot;</span><span class="token punctuation">,</span>
<span class="token string">&quot;titleEn&quot;</span><span class="token operator">:</span> <span class="token string">&quot;bodyParam1&quot;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token string">&quot;required&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
<span class="token string">&quot;bodyParam1&quot;</span>
<span class="token punctuation">]</span>
<span class="token punctuation">}</span>
</code></pre></div><p>以上例子定义了必传请求体参数<code>bodyParam1</code></p> <p><code>title</code>字段用于验证失败时提示使用例如请求接口时没传请求体参数时会提示“请求体参数1不能为空”错误提示输出通过校验结果配置详情请看后文介绍如图所示。</p> <p><img src="/fizz-gateway-community/manager_aggregate_add_input_body_1.png" alt="manager_aggregate_add_input_body_1"></p> <p>当定义了语言配置(详情请查看后文的语言配置介绍)选项为英文时会使用<code>titleEn</code>字段用于验证失败时提示使用例如请求接口时没传请求体参数时会提示“bodyParam1 is missing but it is required”错误提示输出通过校验结果配置详情请看后文介绍如图所示。</p> <p><img src="/fizz-gateway-community/manager_aggregate_add_input_body_2.png" alt="manager_aggregate_add_input_body_2"></p> <h4 id="query参数"><a href="#query参数" class="header-anchor">#</a> Query参数</h4> <p>定义聚合接口的Query参数。</p> <p><img src="/fizz-gateway-community/manager_aggregate_add_5.png" alt="manager_aggregate_add_5"></p> <p>举个例子:</p> <div class="language-javascript extra-class"><pre class="language-javascript"><code><span class="token punctuation">{</span>
<span class="token string">&quot;type&quot;</span><span class="token operator">:</span> <span class="token string">&quot;object&quot;</span><span class="token punctuation">,</span>
<span class="token string">&quot;properties&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token string">&quot;queryParam1&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token string">&quot;type&quot;</span><span class="token operator">:</span> <span class="token string">&quot;string&quot;</span><span class="token punctuation">,</span>
<span class="token string">&quot;title&quot;</span><span class="token operator">:</span> <span class="token string">&quot;query参数1&quot;</span><span class="token punctuation">,</span>
<span class="token string">&quot;titleEn&quot;</span><span class="token operator">:</span> <span class="token string">&quot;queryParam1&quot;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token string">&quot;required&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
<span class="token string">&quot;queryParam1&quot;</span>
<span class="token punctuation">]</span>
<span class="token punctuation">}</span>
</code></pre></div><p>以上例子定义了必传Query参数<code>queryParam1</code></p> <p><code>title</code>字段用于验证失败时提示使用例如请求接口时没传Query参数时会提示“query参数1不能为空”错误提示输出通过校验结果配置详情请看后文介绍如图所示。</p> <p><img src="/fizz-gateway-community/manager_aggregate_add_input_query_1.png" alt="manager_aggregate_add_input_query_1"></p> <p>当定义了语言配置(详情请查看后文的语言配置介绍)选项为英文时会使用<code>titleEn</code>字段用于验证失败时提示使用例如请求接口时没传Query参数时会提示“queryParam1 is missing but it is required”错误提示输出通过校验结果配置详情请看后文介绍如图所示。</p> <p><img src="/fizz-gateway-community/manager_aggregate_add_input_query_2.png" alt="manager_aggregate_add_input_query_2"></p> <h4 id="脚本校验"><a href="#脚本校验" class="header-anchor">#</a> 脚本校验</h4> <p>对于JSON Schema规范无法覆盖的校验场景可以使用脚本对入参进行更加灵活的处理。</p> <p><img src="/fizz-gateway-community/manager_aggregate_add_6.png" alt="manager_aggregate_add_6"></p> <p>点击 新增 按钮后弹出脚本配置窗口,如图所示。</p> <p><img src="/fizz-gateway-community/manager_aggregate_add_7.png" alt="manager_aggregate_add_7"></p> <p>脚本类型可选javascript|groovy必选</p> <p>脚本内容:所选的脚本类型语言编写的入参验证脚本,必填。</p> <p>举个例子:</p> <div class="language-javascript extra-class"><pre class="language-javascript"><code><span class="token comment">// javascript脚本函数名不能修改</span>
<span class="token keyword">function</span> <span class="token function">dyFunc</span><span class="token punctuation">(</span><span class="token parameter">paramsJsonStr</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token comment">// 上下文, 数据结构请参考 context.js</span>
<span class="token keyword">var</span> context <span class="token operator">=</span> <span class="token constant">JSON</span><span class="token punctuation">.</span><span class="token function">parse</span><span class="token punctuation">(</span>paramsJsonStr<span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token string">'context'</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
<span class="token comment">// common为内置的上下文便捷操作工具类详情请参考common.js例如</span>
<span class="token comment">// var data = common.getStepRespBody(context, 'step2', 'request1', 'data');</span>
<span class="token comment">// do something</span>
<span class="token keyword">var</span> headerParam1 <span class="token operator">=</span> common<span class="token punctuation">.</span><span class="token function">getInputReqHeader</span><span class="token punctuation">(</span>context<span class="token punctuation">,</span> <span class="token string">'headerParam1'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">var</span> bodyParam1 <span class="token operator">=</span> common<span class="token punctuation">.</span><span class="token function">getInputReqBody</span><span class="token punctuation">(</span>context<span class="token punctuation">,</span> <span class="token string">'bodyParam1'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">var</span> queryParam1 <span class="token operator">=</span> common<span class="token punctuation">.</span><span class="token function">getInputReqParam</span><span class="token punctuation">(</span>context<span class="token punctuation">,</span> <span class="token string">'queryParam1'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">var</span> result <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Array</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>headerParam1 <span class="token operator">!=</span> bodyParam1<span class="token punctuation">)</span> <span class="token punctuation">{</span>
result<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span><span class="token string">&quot;headerParam1与bodyParam1不一致&quot;</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>queryParam1 <span class="token operator">!=</span> bodyParam1<span class="token punctuation">)</span> <span class="token punctuation">{</span>
result<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span><span class="token string">&quot;queryParam1与bodyParam1不一致&quot;</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>headerParam1 <span class="token operator">!=</span> queryParam1<span class="token punctuation">)</span> <span class="token punctuation">{</span>
result<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span><span class="token string">&quot;headerParam1与queryParam1不一致&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token comment">// 返回结果为Array或Object时要先转为json字符串</span>
<span class="token keyword">return</span> <span class="token constant">JSON</span><span class="token punctuation">.</span><span class="token function">stringify</span><span class="token punctuation">(</span>result<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre></div><p>以上例子使用javascript编写参数校验限制入参<code>headerParam1</code><code>bodyParam1</code><code>queryParam1</code>必须一致,不一致将提示错误信息(错误提示输出通过校验结果配置,详情请看后文介绍),如图所示。</p> <p><img src="/fizz-gateway-community/manager_aggregate_add_input_script.png" alt="manager_aggregate_add_input_script"></p> <h4 id="语言配置"><a href="#语言配置" class="header-anchor">#</a> 语言配置</h4> <p>聚合接口默认使用中文响应校验失败提示,通过配置可通过入参选择不同的提示语言,目前支持中文、英文提示(已满足我们的业务使用场景,有其他语言要求的小伙伴可以联系我们添加)。</p> <p><img src="/fizz-gateway-community/manager_aggregate_add_8.png" alt="manager_aggregate_add_8"></p> <p>字段:入参字段值,例如<code>input.request.body.languageCode</code>使用请求体参数<code>languageCode</code>的值来决定使用哪种语言;</p> <p>中文:中文与入参字段值的映射关系,例如配置<code>0</code>,当请求入参字段值为<code>0</code>时使用中文提示校验结果;</p> <p>英文:英文与入参字段值的映射关系,例如配置<code>1</code>,当请求入参字段值为<code>1</code>时使用中文提示校验结果。</p> <h3 id="配置步骤"><a href="#配置步骤" class="header-anchor">#</a> 配置步骤</h3> <p>聚合接口调用底层服务是通过多个step实现的多个step串行执行每个step包含多个request对底层服务接口的调用同个step里的多个request并行执行后执行的step可以获取已执行step的执行结果更多详情请查看服务编排文章的介绍下面介绍配置步骤的使用。</p> <p><img src="/fizz-gateway-community/manager_aggregate_add_9.png" alt="manager_aggregate_add_9"></p> <p>是否执行完此步骤后结束:勾选后实际请求只执行完该步骤后即响应结果,不执行后续步骤,用于调试使用;</p> <p>请求方法调用底层服务接口的请求类型可选GET|POST必选</p> <p>默认URL调用底层服务接口的默认URL当Fizz网关启动环境没有配置URL时使用该默认URL</p> <p>开发环境URL开发环境调用底层服务接口的URL当Fizz网关启动使用spring.profiles.active=dev时使用该URL</p> <p>测试环境URL测试环境调用底层服务接口的URL当Fizz网关启动使用spring.profiles.active=test时使用该URL</p> <p>预生产环境URL预生产环境调用底层服务接口的URL当Fizz网关启动使用spring.profiles.active=pre时使用该URL</p> <p>生产环境URL生产环境调用底层服务接口的URL当Fizz网关启动使用spring.profiles.active=prod时使用该URL</p> <p>超时时间(毫秒):调用底层服务接口的超时时间,超时抛出异常,单位毫秒;</p> <p>Fallback可选stop|continue控制当调用底层服务接口失败后是否继续执行后续操作</p> <p>请求预处理勾选后可配置预处理脚本预处理脚本返回true时才执行调用底层服务接口。</p> <p><img src="/fizz-gateway-community/manager_aggregate_add_10.png" alt="manager_aggregate_add_10"></p> <p>配置入参:配置调用底层服务接口的请求参数;</p> <p>配置响应:配置调用底层服务接口的响应内容。</p> <p><img src="/fizz-gateway-community/manager_aggregate_add_11.png" alt="manager_aggregate_add_11"></p> <p>配置步骤结果配置step执行完成后的响应内容。</p> <h3 id="配置输出"><a href="#配置输出" class="header-anchor">#</a> 配置输出</h3> <p>配置聚合接口调用完成的响应内容。在响应体、响应头配置中可以配置简单的响应固定值、响应引用值,对于需要逻辑处理得到结果的响应可以通过脚本配置灵活处理,如图所示。</p> <p><img src="/fizz-gateway-community/manager_aggregate_add_12.png" alt="manager_aggregate_add_12"></p> <p><img src="/fizz-gateway-c
<a href="/fizz-gateway-community/guide/manager/manager_service.html" class="prev">
服务管理
</a></span> <span class="next"><a href="/fizz-gateway-community/guide/manager/manager_aggregate_op_log.html">
操作日志
</a>
</span></p></div> </main></div><div class="global-ui"></div></div>
2020-11-09 10:11:25 +08:00
<script src="/fizz-gateway-community/assets/js/app.41e48030.js" defer></script><script src="/fizz-gateway-community/assets/js/2.5b001851.js" defer></script><script src="/fizz-gateway-community/assets/js/14.993243d3.js" defer></script>
2020-10-27 15:45:29 +08:00
</body>
</html>