Files
fizz-gateway-node/docs/assets/js/14.cc27c55a.js
2020-10-27 15:45:29 +08:00

1 line
54 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{357:function(a,t,s){"use strict";s.r(t);var r=s(42),e=Object(r.a)({},(function(){var a=this,t=a.$createElement,s=a._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[s("h2",{attrs:{id:"概述"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#概述"}},[a._v("#")]),a._v(" 概述")]),a._v(" "),s("p",[a._v("接口列表功能用于维护聚合接口,聚合接口从外部调用方角度看是一个简单的接口,通过入参请求获取响应结果,内部实现会调用多个底层后端服务,将多个调用结果聚合转换成外部调用方想要的数据格式,更多详情请查看服务编排介绍,下面介绍接口列表功能的操作。")]),a._v(" "),s("h2",{attrs:{id:"接口列表"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#接口列表"}},[a._v("#")]),a._v(" 接口列表")]),a._v(" "),s("p",[a._v("菜单位置:服务编排 > 接口列表。点击菜单后进入接口列表页面,如图所示。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_list_query.png",alt:"manager_aggregate_list_query"}})]),a._v(" "),s("h2",{attrs:{id:"新增接口"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#新增接口"}},[a._v("#")]),a._v(" 新增接口")]),a._v(" "),s("p",[a._v("点击 新增 按钮弹出新增窗口,如图所示。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_add_1.png",alt:"manager_aggregate_add_1"}})]),a._v(" "),s("h3",{attrs:{id:"基础信息"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#基础信息"}},[a._v("#")]),a._v(" 基础信息")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_add_2.png",alt:"manager_aggregate_add_2"}})]),a._v(" "),s("p",[a._v("所属服务:接口所属服务,更多详情请查看服务管理功能介绍,必选;")]),a._v(" "),s("p",[a._v("接口名接口名称用于展示使用长度不能超过200个字符必填")]),a._v(" "),s("p",[a._v("方法接口请求方法类型可选GET|POST必选")]),a._v(" "),s("p",[a._v("路径接口请求路径后缀长度不能超过2000个字符必填")]),a._v(" "),s("p",[a._v("开发人员接口对应负责的开发人员长度不能超过200个字符")]),a._v(" "),s("p",[a._v("描述接口功能描述长度不能超过2000个字符")]),a._v(" "),s("p",[a._v("举个例子所属服务设置my-test-service方法设置POST路径设置test-aggregate-post对应的聚合接口请求为 POST http://{Fizz网关ip地址}:{port端口}/proxy/my-test-service/test-aggregate-post。")]),a._v(" "),s("h3",{attrs:{id:"配置输入"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#配置输入"}},[a._v("#")]),a._v(" 配置输入")]),a._v(" "),s("p",[a._v("聚合接口的入参大部分是通过JSON Schema来定义的下面先简单地介绍下JSON Schema。")]),a._v(" "),s("h4",{attrs:{id:"json-schema介绍"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#json-schema介绍"}},[a._v("#")]),a._v(" JSON Schema介绍")]),a._v(" "),s("p",[a._v("JSON Schema实际上也是JSON数据用于标注和验证JSON文档可以类比于XML Schema当前最新版本2019-09。")]),a._v(" "),s("p",[a._v("作为普通用户我们并不需要去了解JSON Schema的规范内容只要能够构建JSON Schema即可。")]),a._v(" "),s("blockquote",[s("p",[a._v("要理解JSON Schema首先要理解什么是JSON。JSON是JavaScript Object Notation的缩写一种简单的数据交换格式。最初JSON是基于JavaScript广泛的应用于万维网。由于其简洁和清晰的层次结构、易于人阅读等特性使得越来越多的场景下被采用。")]),a._v(" "),s("p",[a._v("JSON包含以下数据结构")]),a._v(" "),s("ul",[s("li",[a._v("object:"),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"key1"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"value1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"key2"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"value2"')]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])])]),a._v(" "),s("li",[a._v("array:"),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"first"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"second"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"third"')]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n")])])])]),a._v(" "),s("li",[a._v("number:"),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token number"}},[a._v("42")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("3.1415926")]),a._v("\n")])])])]),a._v(" "),s("li",[a._v("string:"),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"This is a string"')]),a._v("\n")])])])]),a._v(" "),s("li",[a._v("boolean:"),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token boolean"}},[a._v("true")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token boolean"}},[a._v("false")]),a._v("\n")])])])]),a._v(" "),s("li",[a._v("null:"),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("null")]),a._v("\n")])])])])]),a._v(" "),s("p",[a._v("通过以上的简单数据类型,就能构造复杂的结构化数据了。下面举两个例子:")]),a._v(" "),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"George Washington"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"birthday"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"February 22, 1732"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"address"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Mount Vernon, Virginia, United States"')]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"first_name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"George"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"last_name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Washington"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"birthday"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"1732-02-22"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"address"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"street_address"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"3200 Mount Vernon Memorial Highway"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"city"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Mount Vernon"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"state"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"Virginia"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"country"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"United States"')]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),s("p",[a._v("以上两个例子都是有效的JSON数据包含一样的有效信息但是当程序读取数据时需要准确的知道数据是怎么组织的比如哪些字段是必须这些字段是什么类型。这时候JSON Schema就派上用场了看以下JSON Schema例子")]),a._v(" "),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"object"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"properties"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"first_name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"string"')]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"last_name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"string"')]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"birthday"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"string"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"format"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"date"')]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"address"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"object"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"properties"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"street_address"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"string"')]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"city"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"string"')]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"state"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"string"')]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"country"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"type"')]),a._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"string"')]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),s("p",[a._v("用以上JSON Schema验证第一个例子时验证失败但是第二个例子验证通过。")]),a._v(" "),s("p",[a._v("JSON Schema本身也是通过JSON编写其本身也是数据不是一个计算机程序只是一种“描述其它数据的结构”的声明格式。这既是长处也是弱点JSON Schema可以简洁地描述数据的结构并且自动验证数据但是对于数据元素间的关系表达就力不能及了。")])]),a._v(" "),s("p",[a._v("更多JSON Schema知识可以阅读"),s("a",{attrs:{href:"https://json-schema.org/understanding-json-schema/",target:"_blank",rel:"noopener noreferrer"}},[a._v("Understanding JSON Schema"),s("OutboundLink")],1),a._v("。")]),a._v(" "),s("h4",{attrs:{id:"请求头部"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#请求头部"}},[a._v("#")]),a._v(" 请求头部")]),a._v(" "),s("p",[a._v("定义聚合接口的请求Header参数。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_add_3.png",alt:"manager_aggregate_add_3"}})]),a._v(" "),s("p",[a._v("举个例子:")]),a._v(" "),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"object"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"properties"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"headerParam1"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"string"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"title"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"请求头参数1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"titleEn"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"headerParam1"')]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"required"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"headerParam1"')]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),s("p",[a._v("以上例子定义了必传请求头参数"),s("code",[a._v("headerParam1")]),a._v("。")]),a._v(" "),s("p",[s("code",[a._v("title")]),a._v("字段用于验证失败时提示使用例如请求接口时没传请求头时会提示“请求头参数1不能为空”错误提示输出通过校验结果配置详情请看后文介绍如图所示。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_add_input_header_1.png",alt:"manager_aggregate_add_input_header_1"}})]),a._v(" "),s("p",[a._v("当定义了语言配置(详情请查看后文的语言配置介绍)选项为英文时会使用"),s("code",[a._v("titleEn")]),a._v("字段用于验证失败时提示使用例如请求接口时没传请求头时会提示“headerParam1 is missing but it is required”错误提示输出通过校验结果配置详情请看后文介绍如图所示。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_add_input_header_2.png",alt:"manager_aggregate_add_input_header_2"}})]),a._v(" "),s("h4",{attrs:{id:"请求体"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#请求体"}},[a._v("#")]),a._v(" 请求体")]),a._v(" "),s("p",[a._v("定义聚合接口的请求体参数。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_add_4.png",alt:"manager_aggregate_add_4"}})]),a._v(" "),s("p",[a._v("举个例子:")]),a._v(" "),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"object"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"properties"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"bodyParam1"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"string"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"title"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"请求体参数1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"titleEn"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"bodyParam1"')]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"required"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"bodyParam1"')]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),s("p",[a._v("以上例子定义了必传请求体参数"),s("code",[a._v("bodyParam1")]),a._v("。")]),a._v(" "),s("p",[s("code",[a._v("title")]),a._v("字段用于验证失败时提示使用例如请求接口时没传请求体参数时会提示“请求体参数1不能为空”错误提示输出通过校验结果配置详情请看后文介绍如图所示。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_add_input_body_1.png",alt:"manager_aggregate_add_input_body_1"}})]),a._v(" "),s("p",[a._v("当定义了语言配置(详情请查看后文的语言配置介绍)选项为英文时会使用"),s("code",[a._v("titleEn")]),a._v("字段用于验证失败时提示使用例如请求接口时没传请求体参数时会提示“bodyParam1 is missing but it is required”错误提示输出通过校验结果配置详情请看后文介绍如图所示。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_add_input_body_2.png",alt:"manager_aggregate_add_input_body_2"}})]),a._v(" "),s("h4",{attrs:{id:"query参数"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#query参数"}},[a._v("#")]),a._v(" Query参数")]),a._v(" "),s("p",[a._v("定义聚合接口的Query参数。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_add_5.png",alt:"manager_aggregate_add_5"}})]),a._v(" "),s("p",[a._v("举个例子:")]),a._v(" "),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"object"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"properties"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"queryParam1"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"string"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"title"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"query参数1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"titleEn"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"queryParam1"')]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"required"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"queryParam1"')]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),s("p",[a._v("以上例子定义了必传Query参数"),s("code",[a._v("queryParam1")]),a._v("。")]),a._v(" "),s("p",[s("code",[a._v("title")]),a._v("字段用于验证失败时提示使用例如请求接口时没传Query参数时会提示“query参数1不能为空”错误提示输出通过校验结果配置详情请看后文介绍如图所示。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_add_input_query_1.png",alt:"manager_aggregate_add_input_query_1"}})]),a._v(" "),s("p",[a._v("当定义了语言配置(详情请查看后文的语言配置介绍)选项为英文时会使用"),s("code",[a._v("titleEn")]),a._v("字段用于验证失败时提示使用例如请求接口时没传Query参数时会提示“queryParam1 is missing but it is required”错误提示输出通过校验结果配置详情请看后文介绍如图所示。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_add_input_query_2.png",alt:"manager_aggregate_add_input_query_2"}})]),a._v(" "),s("h4",{attrs:{id:"脚本校验"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#脚本校验"}},[a._v("#")]),a._v(" 脚本校验")]),a._v(" "),s("p",[a._v("对于JSON Schema规范无法覆盖的校验场景可以使用脚本对入参进行更加灵活的处理。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_add_6.png",alt:"manager_aggregate_add_6"}})]),a._v(" "),s("p",[a._v("点击 新增 按钮后弹出脚本配置窗口,如图所示。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_add_7.png",alt:"manager_aggregate_add_7"}})]),a._v(" "),s("p",[a._v("脚本类型可选javascript|groovy必选")]),a._v(" "),s("p",[a._v("脚本内容:所选的脚本类型语言编写的入参验证脚本,必填。")]),a._v(" "),s("p",[a._v("举个例子:")]),a._v(" "),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("// javascript脚本函数名不能修改")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("function")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("dyFunc")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),s("span",{pre:!0,attrs:{class:"token parameter"}},[a._v("paramsJsonStr")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("// 上下文, 数据结构请参考 context.js")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("var")]),a._v(" context "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[a._v("JSON")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("parse")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("paramsJsonStr"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'context'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("// common为内置的上下文便捷操作工具类详情请参考common.js例如")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("// var data = common.getStepRespBody(context, 'step2', 'request1', 'data');")]),a._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("// do something")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("var")]),a._v(" headerParam1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" common"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("getInputReqHeader")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'headerParam1'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("var")]),a._v(" bodyParam1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" common"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("getInputReqBody")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'bodyParam1'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("var")]),a._v(" queryParam1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" common"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("getInputReqParam")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'queryParam1'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("var")]),a._v(" result "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("new")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("Array")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("if")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("headerParam1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("!=")]),a._v(" bodyParam1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n result"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("push")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"headerParam1与bodyParam1不一致"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("if")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("queryParam1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("!=")]),a._v(" bodyParam1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n result"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("push")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"queryParam1与bodyParam1不一致"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("if")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("headerParam1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("!=")]),a._v(" queryParam1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n result"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("push")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"headerParam1与queryParam1不一致"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("// 返回结果为Array或Object时要先转为json字符串")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("return")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[a._v("JSON")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("stringify")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("result"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n\n")])])]),s("p",[a._v("以上例子使用javascript编写参数校验限制入参"),s("code",[a._v("headerParam1")]),a._v("、"),s("code",[a._v("bodyParam1")]),a._v("、"),s("code",[a._v("queryParam1")]),a._v("必须一致,不一致将提示错误信息(错误提示输出通过校验结果配置,详情请看后文介绍),如图所示。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_add_input_script.png",alt:"manager_aggregate_add_input_script"}})]),a._v(" "),s("h4",{attrs:{id:"语言配置"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#语言配置"}},[a._v("#")]),a._v(" 语言配置")]),a._v(" "),s("p",[a._v("聚合接口默认使用中文响应校验失败提示,通过配置可通过入参选择不同的提示语言,目前支持中文、英文提示(已满足我们的业务使用场景,有其他语言要求的小伙伴可以联系我们添加)。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_add_8.png",alt:"manager_aggregate_add_8"}})]),a._v(" "),s("p",[a._v("字段:入参字段值,例如"),s("code",[a._v("input.request.body.languageCode")]),a._v("使用请求体参数"),s("code",[a._v("languageCode")]),a._v("的值来决定使用哪种语言;")]),a._v(" "),s("p",[a._v("中文:中文与入参字段值的映射关系,例如配置"),s("code",[a._v("0")]),a._v(",当请求入参字段值为"),s("code",[a._v("0")]),a._v("时使用中文提示校验结果;")]),a._v(" "),s("p",[a._v("英文:英文与入参字段值的映射关系,例如配置"),s("code",[a._v("1")]),a._v(",当请求入参字段值为"),s("code",[a._v("1")]),a._v("时使用中文提示校验结果。")]),a._v(" "),s("h3",{attrs:{id:"配置步骤"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#配置步骤"}},[a._v("#")]),a._v(" 配置步骤")]),a._v(" "),s("p",[a._v("聚合接口调用底层服务是通过多个step实现的多个step串行执行每个step包含多个request对底层服务接口的调用同个step里的多个request并行执行后执行的step可以获取已执行step的执行结果更多详情请查看服务编排文章的介绍下面介绍配置步骤的使用。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_add_9.png",alt:"manager_aggregate_add_9"}})]),a._v(" "),s("p",[a._v("是否执行完此步骤后结束:勾选后实际请求只执行完该步骤后即响应结果,不执行后续步骤,用于调试使用;")]),a._v(" "),s("p",[a._v("请求方法调用底层服务接口的请求类型可选GET|POST必选")]),a._v(" "),s("p",[a._v("默认URL调用底层服务接口的默认URL当Fizz网关启动环境没有配置URL时使用该默认URL")]),a._v(" "),s("p",[a._v("开发环境URL开发环境调用底层服务接口的URL当Fizz网关启动使用spring.profiles.active=dev时使用该URL")]),a._v(" "),s("p",[a._v("测试环境URL测试环境调用底层服务接口的URL当Fizz网关启动使用spring.profiles.active=test时使用该URL")]),a._v(" "),s("p",[a._v("预生产环境URL预生产环境调用底层服务接口的URL当Fizz网关启动使用spring.profiles.active=pre时使用该URL")]),a._v(" "),s("p",[a._v("生产环境URL生产环境调用底层服务接口的URL当Fizz网关启动使用spring.profiles.active=prod时使用该URL")]),a._v(" "),s("p",[a._v("超时时间(毫秒):调用底层服务接口的超时时间,超时抛出异常,单位毫秒;")]),a._v(" "),s("p",[a._v("Fallback可选stop|continue控制当调用底层服务接口失败后是否继续执行后续操作")]),a._v(" "),s("p",[a._v("请求预处理勾选后可配置预处理脚本预处理脚本返回true时才执行调用底层服务接口。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_add_10.png",alt:"manager_aggregate_add_10"}})]),a._v(" "),s("p",[a._v("配置入参:配置调用底层服务接口的请求参数;")]),a._v(" "),s("p",[a._v("配置响应:配置调用底层服务接口的响应内容。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_add_11.png",alt:"manager_aggregate_add_11"}})]),a._v(" "),s("p",[a._v("配置步骤结果配置step执行完成后的响应内容。")]),a._v(" "),s("h3",{attrs:{id:"配置输出"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#配置输出"}},[a._v("#")]),a._v(" 配置输出")]),a._v(" "),s("p",[a._v("配置聚合接口调用完成的响应内容。在响应体、响应头配置中可以配置简单的响应固定值、响应引用值,对于需要逻辑处理得到结果的响应可以通过脚本配置灵活处理,如图所示。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_add_12.png",alt:"manager_aggregate_add_12"}})]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_add_13.png",alt:"manager_aggregate_add_13"}})]),a._v(" "),s("h3",{attrs:{id:"校验结果"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#校验结果"}},[a._v("#")]),a._v(" 校验结果")]),a._v(" "),s("p",[a._v("配置聚合接口入参校验失败后的响应内容,在响应体、响应头配置中可以配置简单的响应固定值、响应引用值,对于需要逻辑处理得到结果的响应可以通过脚本配置灵活处理,如图所示。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_add_14.png",alt:"manager_aggregate_add_14"}})]),a._v(" "),s("p",[a._v("校验结果有一个专用的引用值"),s("code",[a._v("validateMsg")]),a._v(",该引用值用于存放入参验证错误提示信息。")]),a._v(" "),s("h3",{attrs:{id:"保存接口"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#保存接口"}},[a._v("#")]),a._v(" 保存接口")]),a._v(" "),s("p",[a._v("所有配置完成后点击 保存 按钮,完成聚合接口的配置。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_add_15.png",alt:"manager_aggregate_add_15"}})]),a._v(" "),s("h2",{attrs:{id:"导出接口"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#导出接口"}},[a._v("#")]),a._v(" 导出接口")]),a._v(" "),s("p",[a._v("导出功能将聚合接口以配置文件的形式导出,导出的文件可通过导入功能重新导入系统,当我们的系统分多个环境时,可使用导出导入功能实现聚合接口的快速同步,下面介绍导出功能。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_export_1.png",alt:"manager_aggregate_export_1"}})]),a._v(" "),s("p",[a._v("勾选想到导出的接口,点击 导出 按钮弹出确认窗口,如图所示。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_export_2.png",alt:"manager_aggregate_export_2"}})]),a._v(" "),s("p",[a._v("点击 确定 按钮,浏览器保存配置文件,如图所示。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_export_3.png",alt:"manager_aggregate_export_3"}})]),a._v(" "),s("h2",{attrs:{id:"导入接口"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#导入接口"}},[a._v("#")]),a._v(" 导入接口")]),a._v(" "),s("p",[a._v("导入功能将配置文件中的聚合接口转化成后台的持久化存储导入的文件可以通过导出功能获取或者通过编写好的聚合配置JSON文件转化得到转换工具可以联系我们获取。当我们的系统分多个环境时可使用导出导入功能实现聚合接口的快速同步下面介绍导出功能。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_import_1.png",alt:"manager_aggregate_import_1"}})]),a._v(" "),s("p",[a._v("点击 导入 按钮弹出导入配置窗口,如图所示。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_import_2.png",alt:"manager_aggregate_import_2"}})]),a._v(" "),s("p",[a._v("点击 选取文件 按钮后选取要导入的配置文件;")]),a._v(" "),s("p",[a._v("强制覆盖通过请求类型GET|POST、请求路径/proxy/{service}/{apiPath})可以唯一确定一个聚合接口,当聚合接口已存在时,未勾选该选项时忽略该聚合接口导入,勾选该选项时覆盖已存在的聚合接口配置;")]),a._v(" "),s("p",[a._v("点击 确定 按钮后导入聚合接口配置。")]),a._v(" "),s("h2",{attrs:{id:"调试模式"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#调试模式"}},[a._v("#")]),a._v(" 调试模式")]),a._v(" "),s("p",[a._v("调试模式用于对接口开发过程中的调试使用当打开调试模式后Fizz网关会将聚合接口调用底层服务接口的请求响应信息以及耗时、聚合结果、步骤上下文打印到日志中通过日志可以清楚的了解聚合接口的实际执行情况。调试模式会对网关性能造成影响因此不建议在生产环境打开调试模式当调试完成后及时关闭调试模式避免打印过多日志造成资源浪费下面介绍调试模式的使用。")]),a._v(" "),s("p",[a._v("勾选想要打开调试模式的接口,点击 打开调试模式 按钮弹出确认窗口,如图所示。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_debug_mode_1.png",alt:"manager_aggregate_debug_mode_1"}})]),a._v(" "),s("p",[a._v("点击 确定 按钮确认打开调试模式。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_debug_mode_2.png",alt:"manager_aggregate_debug_mode_2"}})]),a._v(" "),s("p",[a._v("勾选想要关闭调试模式的接口,点击 关闭调试模式 按钮弹出确认窗口,如图所示。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_debug_mode_3.png",alt:"manager_aggregate_debug_mode_3"}})]),a._v(" "),s("p",[a._v("点击 确定 按钮确认关闭调试模式。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_debug_mode_4.png",alt:"manager_aggregate_debug_mode_4"}})]),a._v(" "),s("h2",{attrs:{id:"编辑接口"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#编辑接口"}},[a._v("#")]),a._v(" 编辑接口")]),a._v(" "),s("p",[a._v("点击 编辑 按钮弹出编辑窗口,如图所示。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_edit_1.png",alt:"manager_aggregate_edit_1"}})]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_edit_2.png",alt:"manager_aggregate_edit_2"}})]),a._v(" "),s("h2",{attrs:{id:"删除接口"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#删除接口"}},[a._v("#")]),a._v(" 删除接口")]),a._v(" "),s("p",[a._v("点击 删除 按钮弹出删除确认窗口,如图所示。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_delete_1.png",alt:"manager_aggregate_delete_1"}})]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_delete_2.png",alt:"manager_aggregate_delete_2"}})]),a._v(" "),s("p",[a._v("点击 确定 按钮后删除接口,处于已发布状态的接口无法删除,需要下线后才能操作删除。")]),a._v(" "),s("h2",{attrs:{id:"发布-下线申请"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#发布-下线申请"}},[a._v("#")]),a._v(" 发布|下线申请")]),a._v(" "),s("p",[a._v("发布|下线申请用于聚合接口的发布或者下线申请,只有通过审核人审核后申请人才能执行发布|下线操作,避免误操作‘,保证接口的安全。")]),a._v(" "),s("p",[a._v("点击 发布|下线申请 按钮,弹出发布|下线申请窗口,如图所示。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_apply_1.png",alt:"manager_aggregate_apply_1"}})]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_apply_2.png",alt:"manager_aggregate_apply_2"}})]),a._v(" "),s("p",[a._v("点击 添加 按钮后,弹出接口列表,勾选需要操作的接口,点击 确定 添加进申请中。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_apply_3.png",alt:"manager_aggregate_apply_3"}})]),a._v(" "),s("p",[a._v("标题申请的标题长度不能超过200个字符必填")]),a._v(" "),s("p",[a._v("类型:申请类型,可选发布|下线,必选;")]),a._v(" "),s("p",[a._v("申请原因申请的原因长度不能超过2000个字符")]),a._v(" "),s("p",[a._v("选择审核人:选择有审核权限的人对申请进行审核,列表根据需要操作的接口动态变化(未添加接口时列表为空,拥有服务权限并且有待审核菜单权限的人、操作管理员角色的人为可选审核人),必选;")]),a._v(" "),s("p",[a._v("点击 确定 按钮后提交申请,选择的审核人会收到申请审核邮件(审核人邮箱地址通过用户管理设置,更多详情请查看用户管理功能介绍),如图所示。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_apply_4.png",alt:"manager_aggregate_apply_4"}})]),a._v(" "),s("h2",{attrs:{id:"接口测试"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#接口测试"}},[a._v("#")]),a._v(" 接口测试")]),a._v(" "),s("p",[a._v("后台提供了可视化的接口调用界面,聚合接口创建完成后可通过该界面对接口进行调用测试。通过点击接口详情页面的 测试 按钮打开接口测试页面,如图所示。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_test_1.png",alt:"manager_aggregate_test_1"}})]),a._v(" "),s("p",[a._v("跳转页面的同时后台会将接口当前的最新配置推送给Fizz网关生成一个测试接口请求路径为/proxytest/{service}/{apiPath}。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_test_2.png",alt:"manager_aggregate_test_2"}})]),a._v(" "),s("p",[a._v("点击 发送 按钮向指定接口发送一次请求Response响应结果区域显示调用接口结果如图所示。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_test_3.png",alt:"manager_aggregate_test_3"}})]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_test_4.png",alt:"manager_aggregate_test_4"}})]),a._v(" "),s("p",[a._v("请求体tab用于配置请求的请求体参数。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_test_5.png",alt:"manager_aggregate_test_5"}})]),a._v(" "),s("p",[a._v("请求头tab用于配置请求的请求头参数。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_test_6.png",alt:"manager_aggregate_test_6"}})]),a._v(" "),s("p",[a._v("Query参数用于配置请求的Query参数。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_test_7.png",alt:"manager_aggregate_test_7"}})]),a._v(" "),s("p",[a._v("返回ContextFizz网关中一次聚合接口的请求过程中内部会持有一个Context对象该对象保存了本次请求过程的入参信息、底层服务接口调用信息、响应信息通过勾选该选项接口会将Context随接口响应一起返回通过查看Context可以清楚地了解接口的实际调用过程。")]),a._v(" "),s("p",[a._v("未勾选 返回Context 选项时,接口按配置输出的设置响应结果,如图所示。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_test_8.png",alt:"manager_aggregate_test_8"}})]),a._v(" "),s("p",[a._v("勾选 返回Context 选项后接口会将Context随接口响应一起返回如图所示。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_test_9.png",alt:"manager_aggregate_test_9"}})]),a._v(" "),s("p",[a._v("测试接口:调用测试接口,请求路径为/proxytest/{service}/{apiPath}")]),a._v(" "),s("p",[a._v("正式接口:调用正式接口,请求路径为/proxy/{service}/{apiPath};")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_test_10.png",alt:"manager_aggregate_test_10"}})]),a._v(" "),s("p",[a._v("点击 保存 按钮会将本次测试请求数据保存下来,通过选取已保存的测试记录可以快速恢复请求数据,如图所示。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_test_11.png",alt:"manager_aggregate_test_11"}})]),a._v(" "),s("p",[a._v("标题本次测试数据保存时使用的标题长度不能超过2000个字符保存后在历史测试记录列表显示如图所示。")]),a._v(" "),s("p",[s("img",{attrs:{src:"/fizz-gateway-community/manager_aggregate_test_12.png",alt:"manager_aggregate_test_12"}})])])}),[],!1,null,null,null);t.default=e.exports}}]);