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开源库的介绍 有五种模型大小,其中四种仅支持英语,提供速度和准确性的权衡。上面便是可用模型的名称、大致的内存需求和相对速度。如果是英文版的语音,直接想转换为英文。 本来我是想直接在我的…...
融知财经:期货和现货的区别是什么?哪个风险大?
期货和现货在交易对象等方面存在明显的区别。期货交易是一种衍生金融工具,主要用于价格发现、风险管理和投机,而现货交易则是商品和服务的实际买卖。在选择进行期货交易还是现货交易时,投资者需要根据自己的需求和市场情况来决定。 期货和现货…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...
Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...
针对药品仓库的效期管理问题,如何利用WMS系统“破局”
案例: 某医药分销企业,主要经营各类药品的批发与零售。由于药品的特殊性,效期管理至关重要,但该企业一直面临效期问题的困扰。在未使用WMS系统之前,其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...
Django RBAC项目后端实战 - 03 DRF权限控制实现
项目背景 在上一篇文章中,我们完成了JWT认证系统的集成。本篇文章将实现基于Redis的RBAC权限控制系统,为系统提供细粒度的权限控制。 开发目标 实现基于Redis的权限缓存机制开发DRF权限控制类实现权限管理API配置权限白名单 前置配置 在开始开发权限…...




