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-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/14.7e909813.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/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" > < link rel = "prefetch" href = "/assets/js/9.6a35b918.js" >
2020-11-09 11:57:42 +08:00
< link rel = "stylesheet" href = "/assets/css/0.styles.34d67128.css" >
2020-10-27 15:45:29 +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-10-27 15:45:29 +08:00
首页
2020-11-09 11:57:42 +08:00
< / a > < / div > < div class = "nav-item" > < a href = "/guide/intro/" class = "nav-link" >
2020-10-27 15:45:29 +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-10-27 15:45:29 +08:00
首页
2020-11-09 11:57:42 +08:00
< / a > < / div > < div class = "nav-item" > < a href = "/guide/intro/" class = "nav-link" >
2020-10-27 15:45:29 +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" > < span > 服务编排< / span > <!-- --> < / p > < ul class = "sidebar-links sidebar-group-items" > < li > < a href = "/guide/aggregate/" 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" class = "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 hr
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" > " first" < / span > < span class = "token punctuation" > ,< / span > < span class = "token string" > " second" < / span > < span class = "token punctuation" > ,< / span > < span class = "token string" > " third" < / 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" > " This is a string" < / 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" > " name" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " George Washington" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token string" > " birthday" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " February 22, 1732" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token string" > " address" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " Mount Vernon, Virginia, United States" < / 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" > " first_name" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " George" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token string" > " last_name" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " Washington" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token string" > " birthday" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " 1732-02-22" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token string" > " address" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span >
< span class = "token string" > " street_address" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " 3200 Mount Vernon Memorial Highway" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token string" > " city" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " Mount Vernon" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token string" > " state" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " Virginia" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token string" > " country" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " United States" < / 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" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " object" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token string" > " properties" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span >
< span class = "token string" > " first_name" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span > < span class = "token string" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " string" < / span > < span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token string" > " last_name" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span > < span class = "token string" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " string" < / span > < span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token string" > " birthday" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span > < span class = "token string" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " string" < / span > < span class = "token punctuation" > ,< / span > < span class = "token string" > " format" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " date" < / span > < span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token string" > " address" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span >
< span class = "token string" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " object" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token string" > " properties" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span >
< span class = "token string" > " street_address" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span > < span class = "token string" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " string" < / span > < span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token string" > " city" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span > < span class = "token string" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " string" < / span > < span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token string" > " state" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span > < span class = "token string" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " string" < / span > < span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token string" > " country" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span > < span class = "token string" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " string" < / 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-09 11:57:42 +08:00
< / 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 = "/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 >
2020-10-27 15:45:29 +08:00
< span class = "token string" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " object" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token string" > " properties" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span >
< span class = "token string" > " headerParam1" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span >
< span class = "token string" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " string" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token string" > " title" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " 请求头参数1" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token string" > " titleEn" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " headerParam1" < / span >
< span class = "token punctuation" > }< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token string" > " required" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > [< / span >
< span class = "token string" > " headerParam1" < / span >
< span class = "token punctuation" > ]< / span >
< span class = "token punctuation" > }< / span >
2020-11-09 11:57:42 +08:00
< / code > < / pre > < / div > < p > 以上例子定义了必传请求头参数< code > headerParam1< / code > 。< / p > < p > < code > title< / code > 字段用于验证失败时提示使用, 例如请求接口时没传请求头时会提示“请求头参数1不能为空”( 错误提示输出通过校验结果配置, 详情请看后文介绍) , 如图所示。< / p > < p > < img src = "/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 = "/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 = "/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 >
2020-10-27 15:45:29 +08:00
< span class = "token string" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " object" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token string" > " properties" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span >
< span class = "token string" > " bodyParam1" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span >
< span class = "token string" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " string" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token string" > " title" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " 请求体参数1" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token string" > " titleEn" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " bodyParam1" < / span >
< span class = "token punctuation" > }< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token string" > " required" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > [< / span >
< span class = "token string" > " bodyParam1" < / span >
< span class = "token punctuation" > ]< / span >
< span class = "token punctuation" > }< / span >
2020-11-09 11:57:42 +08:00
< / code > < / pre > < / div > < p > 以上例子定义了必传请求体参数< code > bodyParam1< / code > 。< / p > < p > < code > title< / code > 字段用于验证失败时提示使用, 例如请求接口时没传请求体参数时会提示“请求体参数1不能为空”( 错误提示输出通过校验结果配置, 详情请看后文介绍) , 如图所示。< / p > < p > < img src = "/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 = "/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 = "/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 >
2020-10-27 15:45:29 +08:00
< span class = "token string" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " object" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token string" > " properties" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span >
< span class = "token string" > " queryParam1" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span >
< span class = "token string" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " string" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token string" > " title" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " query参数1" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token string" > " titleEn" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " queryParam1" < / span >
< span class = "token punctuation" > }< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token string" > " required" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > [< / span >
< span class = "token string" > " queryParam1" < / span >
< span class = "token punctuation" > ]< / span >
< span class = "token punctuation" > }< / span >
2020-11-09 11:57:42 +08:00
< / code > < / pre > < / div > < p > 以上例子定义了必传Query参数< code > queryParam1< / code > 。< / p > < p > < code > title< / code > 字段用于验证失败时提示使用, 例如请求接口时没传Query参数时会提示“query参数1不能为空”( 错误提示输出通过校验结果配置, 详情请看后文介绍) , 如图所示。< / p > < p > < img src = "/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 = "/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 = "/manager_aggregate_add_6.png" alt = "manager_aggregate_add_6" > < / p > < p > 点击 新增 按钮后弹出脚本配置窗口,如图所示。< / p > < p > < img src = "/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 >
2020-10-27 15:45:29 +08:00
< 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" > " headerParam1与bodyParam1不一致" < / 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" > " queryParam1与bodyParam1不一致" < / 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" > " headerParam1与queryParam1不一致" < / 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 >
2020-11-09 11:57:42 +08:00
< / code > < / pre > < / div > < p > 以上例子使用javascript编写参数校验, 限制入参< code > headerParam1< / code > 、< code > bodyParam1< / code > 、< code > queryParam1< / code > 必须一致,不一致将提示错误信息(错误提示输出通过校验结果配置,详情请看后文介绍),如图所示。< / p > < p > < img src = "/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 = "/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 = "/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 = "/manager_aggregate_add_10.png" alt = "manager_aggregate_add_10" > < / p > < p > 配置入参:配置调用底层服务接口的请求参数;< / p > < p > 配置响应:配置调用底层服务接口的响应内容。< / p > < p > < img src = "/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 = "/manager_aggregate_add_12.png" alt = "manager_aggregate_add_12" > < / p > < p > < img src = "/manager_aggregate_add_13.png" alt = "manager_aggregate_add_13" > < / p > < h3 id = "校验结果" > < a href = "#校验结果" class = "header-anchor" > #< / a > 校验结果
2020-10-27 15:45:29 +08:00
←
2020-11-09 11:57:42 +08:00
< a href = "/guide/manager/manager_service.html" class = "prev" >
2020-10-27 15:45:29 +08:00
服务管理
2020-11-09 11:57:42 +08:00
< / a > < / span > < span class = "next" > < a href = "/guide/manager/manager_aggregate_op_log.html" >
2020-10-27 15:45:29 +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/14.7e909813.js" defer > < / script >
2020-10-27 15:45:29 +08:00
< / body >
< / html >