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开源库的介绍 有五种模型大小,其中四种仅支持英语,提供速度和准确性的权衡。上面便是可用模型的名称、大致的内存需求和相对速度。如果是英文版的语音,直接想转换为英文。 本来我是想直接在我的…...
融知财经:期货和现货的区别是什么?哪个风险大?
期货和现货在交易对象等方面存在明显的区别。期货交易是一种衍生金融工具,主要用于价格发现、风险管理和投机,而现货交易则是商品和服务的实际买卖。在选择进行期货交易还是现货交易时,投资者需要根据自己的需求和市场情况来决定。 期货和现货…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...
热烈祝贺埃文科技正式加入可信数据空间发展联盟
2025年4月29日,在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上,可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞,强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...
flow_controllers
关键点: 流控制器类型: 同步(Sync):发布操作会阻塞,直到数据被确认发送。异步(Async):发布操作非阻塞,数据发送由后台线程处理。纯同步(PureSync…...
【若依】框架项目部署笔记
参考【SpringBoot】【Vue】项目部署_no main manifest attribute, in springboot-0.0.1-sn-CSDN博客 多一个redis安装 准备工作: 压缩包下载:http://download.redis.io/releases 1. 上传压缩包,并进入压缩包所在目录,解压到目标…...




