apinto OpenAPI
OpenApi
上游
查询列表
查询详情
新增
{
"name": "jg_upstream",
"driver": "http",
"description": "通过postman添加上游",
"scheme": "HTTPS",
"retry":"1",
"timeout": 1000,
"nodes": [
"127.0.0.1:80 weight=1"
],
"balance": "round-robin",
"pass_host": "node"
}
修改
如果名称或者id不存在则创建
{
"driver": "http",
"description": "修改通过postman添加上游",
"scheme": "HTTPS",
"retry":"3",
"timeout": 2000,
"nodes": [
"127.0.0.2:80 weight=1"
],
"balance": "round-robin",
"pass_host": "node"
}
删除
根据名字或者id
应用
查询列表
查询详情
新增
{
"additional": [],
"anonymous": false,
"auth": [
{
"config": {
"expire": 0,
"password": "jg_app",
"username": "jg_app"
},
"position": "header",
"token_name": "Authorization",
"type": "basic",
"users": [
{
"expire": 0,
"hide_credential": false,
"pattern": {
"password": "jg_app",
"username": "jg_app"
}
}
]
}
],
"description": "postman新增应用",
"driver": "app",
"id": "jg_app@app",
"labels": {},
"name": "jg_app"
}
修改
{
"additional": [],
"anonymous": false,
"auth": [
{
"config": {
"expire": 0,
"password": "jg_app1",
"username": "jg_app1"
},
"position": "header",
"token_name": "Authorization",
"type": "basic",
"users": [
{
"expire": 0,
"hide_credential": false,
"pattern": {
"password": "jg_app1",
"username": "jg_app1"
}
}
]
}
],
"description": "修改postman新增应用",
"driver": "app",
"labels": {},
"name":"修改了名字"
}
删除
API
查询列表
http://172.30.4.85:9400/api/router
查询详情
新增
#当http请求同时满足以下条件时才能匹配这个路由
#method为GET或者POST
#请求头内host的值后缀为.com
#请求路径uri为/demo
#头部存在name这个key,且对应值不为空值
#请求参数里包含key为id,且值不为123
{
"name": "complex_router",
"driver": "http",
"description": "一个匹配规则较复杂的路由",
"listen": 8099,
"method": [
"GET",
"POST"
],
"location": "/demo",
"host": ["*.com"],
"rules": [
{
"type":"header",
"name":"user",
"value":"apinto"
}
],
"service": "anonymous_service@service",
"template": ""
}
Plugin:自定义的插件
proxy_rewrite:重定向
{
"description": "新增api",
"disable": false,
"driver": "http",
"host": [],
"listen": 0,
"location": "/jg/delete",
"method": [
"DELETE"
],
"name": "jg_api",
"plugins": {
"proxy_rewrite": {
"config": {
"headers": {},
"host_rewrite": false,
"not_match_err": true,
"path_type": "prefix",
"prefix_path": [
{
"prefix_path_match": "/test",
"prefix_path_replace": "/test"
}
]
},
"disable": false
}
},
"profession": "router",
"retry": 0,
"rules": [],
"service": "upstream_test@service",
"template": "",
"time_out": 10000,
"websocket": false
}
修改
{
"description": "新增api",
"disable": false,
"driver": "http",
"host": [],
"listen": 0,
"location": "/delete",
"method": [
"DELETE"
],
"name": "jg_api",
"plugins": {
"proxy_rewrite": {
"config": {
"headers": {},
"host_rewrite": false,
"not_match_err": true,
"path_type": "prefix",
"prefix_path": [
{
"prefix_path_match": "/delete", //代理path
"prefix_path_replace": "/test" //数据源地址
}
]
},
"disable": false
}
},
"profession": "router",
"retry": 0,
"rules": [],
"service": "upstream_test@service",
"template": "",
"time_out": 10000,
"websocket": false
}
删除
策略
查询列表类型
查询策略列表
http://172.30.4.85:9400/api/strategy
查询策略详情
删除
访问策略
筛选的是所有的10.11.55.82服务器发送的get方法,
新增
过滤规则和生效规则,可以理解为什么可以做或不能做什么
如拒绝82服务发起的get请求,生效范围是所有请求
{
"description": "拒绝策略",
"driver": "visit",
"filters": {
"ip": [
"10.11.55.82"
],
"method": [
"GET"
]
},
"name": "ip_get",
"priority": 1,
"profession": "strategy",
"stop": false,
"visit": {
"continue": false,
"influence_sphere": {
"api": [
"ALL"
]
},
"visit_rule": "refuse"
}
}
修改
流量限制
新增
{
"description": "",
"driver": "limiting",
"filters": {
"method": [
"ALL"
]
},
"limiting": {
"metrics": [
"{api}"
],
"query": {
"hour": 10000,
"minute": 1000,
"second": 100
},
"response": {
"body": "{ \"msg\":\"很抱歉,$api 暂停服务,请稍候再试!,被流控了1111\"}",
"charset": "UTF-8",
"content_type": "application/json",
"status_code": 200
},
"traffic": {
"hour": 10000,
"minute": 1000,
"second": 100
}
},
"name": "jg_limite",
"priority": 1,
"profession": "strategy",
"stop": false
}
修改
{
"description": "修改流控",
"driver": "limiting",
"filters": {
"method": [
"ALL"
]
},
"limiting": {
"metrics": [
"{api}"
],
"query": {
"hour": 10000,
"minute": 1000,
"second": 100
},
"response": {
"body": "{ \"msg\":\"很抱歉,$api 暂停服务,请稍候再试!,被流控了1111\"}",
"charset": "UTF-8",
"content_type": "application/json",
"status_code": 200
},
"traffic": {
"hour": 10000,
"minute": 1000,
"second": 100
}
},
"name": "jg_limite",
"priority": 1,
"profession": "strategy",
"stop": false
}
灰度发布
一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。
新增
{
"description": "新增灰度",
"driver": "grey",
"filters": {},
"grey": {
"distribution": "percent",
"keep_session": false,
"matching": [],
"nodes": [
"172.30.4.81:4561"
],
"percent": 4800
},
"name": "jg_huidu",
"priority": 1,
"profession": "strategy",
"stop": false
}
修改
测试结果
5000代表50%,一次执行api本来地址,一次执行配置的新地址。
熔断
简单来说,用API的“出错比例”来表示这个API的健康状态,当这个比例值高于设定的阈值,API自动抛出异常,终止服务,这个过程就叫做自动熔断
Api有三种状态,健康期、观察期、熔断期
健康期正常转发到后端
熔断期直接返回预定的值
观察期允许转发到后端,失败达到阈值转入熔断期,成功达到预定阈值转入健康期
比如访问服务每秒失败三次进入熔断期,设置熔断持续时间2(2秒为基准,乘以连续熔断次数,第1次熔断时间为2秒,连续第2次熔断时间为2秒乘以2为4秒),达到熔断时间进入观察期,可以正常请求后端,请求成功达到每秒3次进入健康期,请求失败达到每秒2次则再次进入熔断,随着连续熔断次数增多,熔断时间会越来越大,设置最大熔断持续时间500。设置熔断响应内容
新增
{
"description": "新增熔断",
"driver": "fuse",
"filters": {
"api": [
"659bbf16-9c59-5414-8247-fde143eb783b"
],
"method": [
"GET"
]
},
"fuse": {
"fuse_condition": {
"count": 1,
"status_codes": [
500
]
},
"fuse_time": {
"max_time": 300,
"time": 2
},
"metric": "{service}",
"recover_condition": {
"count": 3,
"status_codes": [
200
]
},
"response": {
"body": "{ \"msg\":\"很抱歉,$api 暂停服务,请稍候再试!,被熔断了\"}",
"charset": "UTF-8",
"content_type": "application/json",
"status_code": 200
}
},
"name": "jg_rongduan",
"priority": 1,
"profession": "strategy",
"stop": false
}
修改
{
"description": "修改熔断",
"driver": "fuse",
"filters": {
"api": [
"659bbf16-9c59-5414-8247-fde143eb783b"
],
"method": [
"ALL"
]
},
"fuse": {
"fuse_condition": {
"count": 5,
"status_codes": [
500
]
},
"fuse_time": {
"max_time": 200,
"time": 2
},
"metric": "{service}",
"recover_condition": {
"count": 4,
"status_codes": [
200
]
},
"response": {
"body": "{ \"msg\":\"很抱歉,$api 暂停服务,请稍候再试!,被熔断了\"}",
"charset": "UTF-8",
"content_type": "application/json",
"status_code": 200
}
},
"name": "jg_rongduan",
"priority": 1,
"profession": "strategy",
"stop": false
}
服务发现
新增
http://172.30.4.85:9400/api/discovery
{
"config": {
"address": [
"http://172.30.3.113:8848"
],
"address_static": [
"http://172.30.3.113:8848"
],
"params": {
"password": "nacos ",
"username": "nacos"
}
},
"description": "nacos服务发现22222222",
"driver": "nacos",
"name": "nacos_dis",
"profession": "discovery"
}
修改
所有查询
172.30.4.84:9400/api/discovery
查询详情
172.30.4.85:9400/api/discovery/nacos_dis@discovery
上游服务绑定服务发现
http://172.30.4.84:9400/api/service
{
"name": "nacos_up_postman",
"driver": "http",
"description": "postman新增nacos上游",
"timeout": 1000,
"retry": 3,
"discovery": "nacos_dis@discovery",
"service": "esb-console-biz",
"balance": "round-robin",
"pass_host": "node",
"profession": "service",
"scheme": "HTTP",
"use_discovery": true
}
创建一个api绑定nacos服务发现
http://172.30.4.85:9400/api/router/
{
"description": "post添加api通过nacos发现服务",
"disable": false,
"driver": "http",
"host": [],
"listen": 0,
"location": "/console/v1/businesstagconfig",
"method": [
"GET"
],
"name": "postman_api_nacos",
"plugins": {
"proxy_rewrite": {
"config": {
"headers": {},
"host_rewrite": false,
"not_match_err": true,
"path_type": "prefix",
"prefix_path": [
{
"prefix_path_match": "/console/v1/businesstagconfig",
"prefix_path_replace": "/console/v1/businesstagconfig"
}
]
},
"disable": false
}
},
"profession": "router",
"retry": 0,
"rules": [
{
"type": "header",
"name": "ss",
"value": "dd"
}
],
"service": "nacos_up_postman@service",
"template": "",
"time_out": 10000,
"websocket": false
}
插件
查询
172.30.4.85:9400/api/template/
查询详情
172.30.4.85:9400/api/template/cc4538eb-abb8-4f09-2d2d-7e4d35f9e3db@template
新增
172.30.4.85:9400/api/template
{
"description": "postam 新增插件添加额外参数",
"driver": "plugin_template",
"name": "postman_plugin",
"plugins": {
"extra_params": {
"config": {
"error_type": "text",
"params": [
{
"conflict": "origin",
"name": "addparamter",
"position": "header",
"value": "paramtervalue"
}
]
},
"disable": false
}
},
"profession": "template"
}
API绑定插件
172.30.4.85:9400/api/router/
{
"description": "新增api绑定插件模板",
"disable": false,
"driver": "http",
"host": [],
"listen": 0,
"location": "/single/delete",
"method": [
"DELETE"
],
"name": "template_api",
"plugins": {
"proxy_rewrite": {
"config": {
"headers": {},
"host_rewrite": false,
"not_match_err": true,
"path_type": "prefix",
"prefix_path": [
{
"prefix_path_match": "/single",
"prefix_path_replace": "/single"
}
]
},
"disable": false
}
},
"profession": "router",
"retry": 0,
"rules": [],
"service": "test@service",
"time_out": 10000,
"template":” postman_plugin@template",
"websocket": false
}
日志
Kafka日志
查询
172.30.4.85:9400/api/output
查询详情
172.30.4.85:9400/api/output/kafka_access@output
新增
172.30.4.85:9400/api/output/
{
"address": "127.0.0.1",
"content_resize": [
{
"size": 11,
"suffix": "log"
}
],
"description": "postman_kafaka日志",
"driver": "kafka_output",
"formatter": {
"fields": [
"$request_id",
"$request",
"$status",
"@time",
"@proxy",
"$response_time"
],
"proxy": [
"$proxy_uri",
"$proxy_scheme",
"$proxy_addr"
],
"time": [
"$msec",
"$time_iso8601",
"$time_local"
]
},
"kafka_version": "3.1.0",
"name": "kafka_access_postman",
"partition_type": "hash",
"profession": "output",
"scopes": [
"access_log"
],
"timeout": 10,
"topic": "ddd",
"type": "json"
}
新增文件日志
{
"content_resize": [
{
"size": 3,
"suffix": "log"
}
],
"description": "postman 添加文件日志",
"dir": "/var/log/apinto",
"driver": "file",
"expore": "3",
"file": "access",
"formatter": {
"fields": [
"$time_iso8601",
"$request_id",
"@request",
"@proxy",
"@response",
"@status_code",
"@time"
],
"proxy": [
"$proxy_method",
"$proxy_scheme",
"$proxy_uri",
"$proxy_host",
"$proxy_header",
"$proxy_addr"
],
"request": [
"$request_method",
"$scheme",
"$request_uri",
"$host",
"$header",
"$remote_addr"
],
"response": [
"$response_header"
],
"status_code": [
"$status",
"$proxy_status"
],
"time": [
"$request_time",
"$response_time"
]
},
"name": "postman_access",
"period": "day",
"profession": "output",
"scopes": [
"access_log"
],
"type": "json"
}
相关文章:

apinto OpenAPI
OpenApi 上游 查询列表 查询详情 新增 { "name": "jg_upstream", "driver": "http", "description": "通过postman添加上游", "scheme": "HTTPS", "retry":"1", "…...

XYCTF - web
目录 warm up ezMake ezhttp ezmd5 牢牢记住,逝者为大 ezPOP 我是一个复读机 ezSerialize 第一关 第二关 第三关 第一种方法: 第二种方法: ez?Make 方法一:利用反弹shell 方法二:通过进制编码绕过 ε…...

学习方法的重要性
原贴:https://www.cnblogs.com/feily/p/13999204.html 原贴:https://36kr.com/p/1236733055209095 1、 “一万小时定律”的正确和误区 正确: 天才和大师的非凡,不是真的天资超人一等,而是付出了持续不断的努力&…...

把现有的 Jenkins 容器推送到一个新的镜像标签,并且重新启动新的容器
要把现有的 Jenkins 容器推送到一个新的镜像标签,并且重新启动新的容器,你可以按照以下步骤操作: 停止当前正在运行的 Jenkins 容器(如果你不想在操作时中断服务,可以跳过此步骤,直接进行下一步)…...

难以重现的 Bug如何处理
对很多测试人员(尤其是对新手来说)在工作过程中最不愿遇到的一件事情就是:在测试过 程中发现了一个问题,觉得是 bug,再试的时候又正常了。 碰到这样的事情,职业素养和测试人员长期养成的死磕的习性会让她…...

我与足球的故事 | 10年的热爱 | 伤病 | 悔恨 | 放弃 or 继续 | 小学生的碎碎念罢了
今天不分享技术博客,今天不知道为什么就是想写我和足球的故事(手术完两个礼拜,手还是很疼那个,就连打字都费劲),上面两张图是我最喜欢的两个球星,当然因为之前特别喜欢巴萨,也特别喜…...

js图片回显的方法
直接上代码: <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body>// HTML部分<input type"file" id"fileInput"><button onclick"show…...

Java中的maven的安装和配置
maven的作用 依赖管理 方便快捷的管理项目依赖的资源,避免版本冲突问题 统一项目管理 提供标准,统一的项目结构 项目构建 标准跨平台(Linux、windows、MacOS)的自动化项目构建方式 maven的安装和配置 在maven官网下载maven Ma…...

轴承制造企业“数智化”突破口
轴承是当代机械设备中一种重要零部件。它的主要功能是支撑机械旋转体,降低其运动过程中的摩擦系数,并保证其回转精度。轴承是工业核心基础零部件,对国民经济发展和国防建设起着重要的支撑作用。 轴承企业普遍采用以销定产的经营模式…...

UIButton案例之添加动画
需求 基于上一节代码进行精简,降低了冗余性。添加动画,使得坐标变化自然,同时使用了bounds属性和center属性,使得UIView变化以中心点为基准。 此外,使用两种方式添加动画:1.原始方式。 2.block方式。 代码…...

C#链接数据库、操作sql、选择串口
// 公共增删方法 using MySql.Data.MySqlClient; using System.Data; namespace ****** {public class MySQLHelper{private MySqlConnection conn null;private MySqlCommand comm null;private MySqlDataReader reader null;/// <summary>/// 构造方法里建议连…...

本地搭建各大直播平台录屏服务结合内网穿透工具实现远程管理录屏任务
文章目录 1. Bililive-go与套件下载1.1 获取ffmpeg1.2 获取Bililive-go1.3 配置套件 2. 本地运行测试3. 录屏设置演示4. 内网穿透工具下载安装5. 配置Bililive-go公网地址6. 配置固定公网地址 本文主要介绍如何在Windows系统电脑本地部署直播录屏利器Bililive-go,并…...

macos使用yarn创建vite时出现Usage Error: The nearest package directory问题
步骤是macos上使用了yarn create vite在window上是直接可以使用了yarn但是在macos上就出现报错 我们仔细看,它说的If /Users/chentianyu isnt intended to be a project, remove any yarn.lock and/or package.json file there.说是要我们清除yarn.lock和package.js…...

【JAVA入门】Day04 - 方法
【JAVA入门】Day04 - 方法 文章目录 【JAVA入门】Day04 - 方法一、方法的格式1.1 无参无返回值的方法定义和调用1.2 带参数的方法定义和调用1.3 形参和实参1.4 带返回值的方法定义和调用1.5 方法的注意事项 二、方法的重载三、方法的使用四、方法的内存原理4.1 方法调用的基本内…...

前端报错 SyntaxError: Unexpected number in JSON at position xxxx at JSON.parse
问题描述 控制台提示 SyntaxError: Unexpected number in JSON at position xxxx at JSON.parse 问题原因 原因:JSON 数据格式错误,是否符合 JSON 格式。 解决方法 应为json格式数据 什么是json格式数据 JSON(JavaScript Object …...

Mybatis进阶详细用法
目录 条件构造器 案例 自定义SQL 案例 Service接口 案例 综合案例 条件构造器 案例 Testvoid testQueryMapper() {// 创建 QueryWrapper 实例QueryWrapper<User> queryWrapper new QueryWrapper<>();queryWrapper.select("id," "username,&…...

Android 系统省电软件分析
1、硬件耗电 主要有: 1、屏幕 2、CPU 3、WLAN 4、感应器 5、GPS(目前我们没有) 电量其实是目前手持设备最宝贵的资源之一,大多数设备都需要不断的充电来维持继续使用。不幸的是,对于开发者来说,电量优化是他们最后才会考虑的的事情…...

了解什么是Docker
了解什么是Docker Docker 是一个开源的应用容器引擎,它允许开发者打包应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类…...

ChatGPT开源的whisper音频生成字幕
1、前言 好了,那接下来看一下whisper开源库的介绍 有五种模型大小,其中四种仅支持英语,提供速度和准确性的权衡。上面便是可用模型的名称、大致的内存需求和相对速度。如果是英文版的语音,直接想转换为英文。 本来我是想直接在我的…...

融知财经:期货和现货的区别是什么?哪个风险大?
期货和现货在交易对象等方面存在明显的区别。期货交易是一种衍生金融工具,主要用于价格发现、风险管理和投机,而现货交易则是商品和服务的实际买卖。在选择进行期货交易还是现货交易时,投资者需要根据自己的需求和市场情况来决定。 期货和现货…...

Android Studio开发之路(十)app中使用aar以及报错记录
书接上文:Android Studio开发之路(九)创建android library以及生成aar文件 五、app中使用aar文件的方法 先复制一下上面生成的aar文件。然后在你要添加到的app左上角选择“project”模式,然后找到libs文件夹,点击右键…...

sql-行转列3(转置)
行转列的常规做法是,group bysum(if())【或count(if())】 例题: 腾讯QQ 假设tableA如表5, tableB如表6, 表5 qq号(字段名:qq)游戏(字段名:game)10000a10000b10000c20000c20000d…...

MATLAB | 最新版MATLAB绘图速查表来啦!!
之前看大佬Pjer做的MATLAB速查表 http://home.ustc.edu.cn/~pjer1316/matlabplot/ 感觉非常的实用,最近几次MATLAB更新围绕画图方面也有很多新东西,于是就有了自己做一张最新版的速查表的想法,这张表长这样: 这张表的配色基本上…...

web安全之登录框渗透骚姿势,新思路
不管漏洞挖掘还是挖SRC,登录框都是重点关注对象,什么漏洞都有可能出现, 本篇文章做个总结,后面发现新思路后会继续更新 万能密码 or 弱口令 SQL注入 水平越权 垂直越权 逻辑漏洞 短信轰炸 邮箱轰炸 信息泄露 验证码DOS XSS万能密…...

无人机+自组网:空地点对点无人机通信解决方案
随着智能化技术的迅速发展, 无人化设备在战场上发挥的作用日益突显。在近期发生的多次局部战争中, 无人设备代替人类承担了多项危险且复杂的攻击任务, 达到 “兵不血刃” 的效果. 2020 年 1 月 3 日, 美军利用无人机执行了刺杀伊朗 “圣城旅” 指挥官苏莱曼尼行动. 纳戈尔诺 - …...

android TV app适配遥控器思路,recycleview选中放大
背景: 1、当遥控器遥控盒子,app内是有一套机制,响应遥控器的操作; 2、要实现遥控器选中的效果,必须要设置setOnFocusChangeListener方法,另外一个就是设置view的setOnClickListener方法;设置完之后&#…...

python篇-cmd 执行pip命令失败,但执行pyhon命令正常
当你在CMD中可以正常执行python命令,但执行pip命令失败时,这通常意味着pip没有被正确地添加到系统的环境变量中。这里有一些步骤来解决这个问题: 检查环境变量: 打开系统的环境变量设置(右击“此电脑”>“属性”>…...

Redis系列-3 Redis缓存问题
1.缓存的作用 数据库(如Mysql)的持久化特点带来了较低的性能,高并发的场景下,连接池很快被耗尽而出现宕机或DOS,无法继续对外提供服务。相对于数据库的硬盘IO,缓存中间件基于内存进行读写,从而具备较大的吞吐量和高并…...

【数据结构】堆(Heap)
文章目录 一、堆的概念及结构二、堆的实现1.向上调整算法2.向下调整算法3.堆的创建4.堆的插入5.堆的删除6.堆的其他操作 三、堆的应用1.堆排序2.Top-K问题 一、堆的概念及结构 堆(Heap)是一种特殊的非线性结构。堆中的元素是按完全二叉树的顺序存储方式存储在数组 中。满足任意…...

vue cli 自定义项目架子,vue自定义项目架子,超详细
脚手架Vue CLI基本介绍: Vue CLI 是Vue官方提供的一个全局命令工具 可以帮助我们快速创建一个开发Vue项目的标准化基础架子【集成了webpack配置】 脚手架优点: 开箱即用,零配置内置babel等工具标准化的webpack配置 脚手架 VueCLI相关命令…...