Apinto 网关 V0.14 版本发布,6 大插件更新!
大家好!
距离上次更新已经过去一段时间了,这段日子里我们一直在酝酿新的功能,本次的迭代将给大家带来 6 大插件的更新~一起来看看有哪些变化吧!
新特性
1. 新增 额外参数v2 插件,支持对转发参数进行加密、拼接等操作。
该插件为额外参数插件的升级版本,在v1版本中,我们只能设置静态参数转发给上游服务,存在一定的局限性。
在某些场景,如:对参数进行签名、加密等操作,v1版本无法完成。
额外参数 v2 在 v1 版本的基础上,新增了以下功能特性:
- 支持引用系统变量(如:请求URI、应用名称等),记录客户端请求特性。
- 支持对参数进行动态处理。如:md5加密、字符串拼接、获取当前请求时间戳和日期等动态操作。
以字符串拼接为例,我们希望通过拼接请求体参数 name
、version
、driver
的方式,生成 x-apispace-token
头部,插件配置如下:
{"params": [{"name": "x-apinto-token","position": "header","type": "$concat","value": ["{name}","{version}","{driver}"]}],"request_body_type": "json"
}
客户端请求体内容如下:
{"name":"apinto","version":"v1","driver":"http"
}
经过 Apinto 转发,后端服务收到的请求头 x-apinto-token
为:
apintov1http
2. 新增 次数扣减 插件,可根据不同用户配置计数扣减,对API调用进行计数限制。
假设你经营一家超市,每个顾客购物时需要使用购物袋。为了管理超市的容量和资源,你设置了每个顾客最多可以使用的购物袋数量。这个限制就类似于次数扣减,在 API 网关中,每个请求都会消耗一定的次数。
超市代表 API 网关,顾客代表发起 API 请求的客户端,购物袋代表可用的请求配额。次数扣减确保 API 请求的数量保持在可接受的限制范围内,防止过载,并确保资源的公平分配,就像超市限制购物袋数量一样,防止过度使用。
当可用次数用完时,可以通过购买额外的请求次数或根据特定条件自动充值来增加可用的请求配额。
Apinto 网关支持以下两种次数扣减方式:
- 对单一请求进行单次计数:每成功转发一次,计数为1次。
- 对单一请求进行批量计数:可配置参数拆分规则,如短信接口,参数
phone
允许输入多个手机号码,此时根据批量扣次的规则,计数为手机号码个数。
次数扣减架构图如上,该插件依赖 Redis 集群进行次数扣减同步,在配置该插件前,需要部署好 Redis 集群并在 Apinto 控制台配置并发布 Redis 配置,如下图:
3. 新增 参数校验 插件,拦截无效请求。
该插件支持校验请求体 、请求头部 、Query 参数 的有效性和合法性,过滤/拦截无效请求。在进行参数校验时,支持正则表达式校验、前缀校验、后缀校验、包含校验、全等校验、为空校验等多种校验方式。
参数校验插件执行简化流程图如下,该图省略路由匹配、剩余插件执行等操作。
4. 新增 请求体校验 插件,限制请求体大小。
当客户端向服务器发送请求时,请求体中可能包含大量的数据,如文件上传、表单提交等。如果没有对请求体大小进行限制,那么客户端可以发送非常大的请求体,这可能导致网络拥塞,影响其他用户的访问速度和体验;其次,处理大量的请求体数据会消耗服务器的计算和存储资源,降低服务器的性能和响应速度。
同时,恶意用户可能利用大请求体来进行拒绝服务(Denial of Service)攻击,通过消耗服务器资源来使其无法正常工作。因此,通过限制请求体大小,可以有效地控制网络流量、保护服务器资源和防止潜在的安全威胁。
5. 新增 格式转换 插件,支持 JSON
与 XML
数据格式互转。
XML
和 JSON
是目前主要的两种数据交换格式。
由于历史原因,一些后端服务系统采用SOAP
协议开发,使用XML
作为数据通讯格式。
现在大多数行业中的开放 API 都使用JSON
格式进行通信。然而,由于后端服务技术过时,无法进行改造。
为了向用户提供更便利的调用方式,我们可以使用格式转换插件来解决JSON
和XML
之间的互转问题。这样,我们就能够通过JSON
格式开放给用户调用,同时与后端服务系统进行无缝交互。
当客户端请求体为JSON
时,经过 Apinto 网关后,将会将数据转换成XML
发送给后端服务;接收到后端服务返回的XML
后,Apinto 将会把该内容转成JSON
返回给客户端,如下图所示:
同理,当客户端请求体为XML
时,也会自动转换成JSON
发送给后端服务。
6. 新增 响应体重写v2 插件。
当匹配响应状态码、响应体、响应头部后,重写响应信息。不仅支持对上游服务返回的响应进行重写,而且支持对插件报错设置的默认响应进行重写。
对上游服务返回的响应流程图如下:
建议将该插件执行顺序尽量靠前,如下图:
写在最后
目前 Apinto 及其周边项目已经开源,我们希望通过 Apinto 强大的插件拓展能力,用户可像乐高积木一样根据需要自行拓展 Apinto 的插件,以满足不同的业务市场需求。
Apinto 目前属于萌芽阶段,我们希望集合广大开源爱好者的力量,与大家一起讨论方案,接受大家的批评指正,一起将产品打磨完善,做下一个端与端间的Traffic Middleware。这是一个开放和积极的项目,我们诚挚地邀请您一起参与到我们的项目开源工作中。每一个贡献都是有意义的,包括但不限于:
·查找 bugs,取得性能上的提升
·帮助完善文档,提供用户操作体验
·提交你们的 issue,让我们知道您的奇思妙想
·参与自定义插件的开发,丰富 Apinto 的能力
...
欢迎各位开源爱好者参与到 Apinto 项目中,和我们一起为开源事业贡献自己的力量!
Apinto GitHub :https://github.com/eolinker/apinto
相关文章:

Apinto 网关 V0.14 版本发布,6 大插件更新!
大家好! 距离上次更新已经过去一段时间了,这段日子里我们一直在酝酿新的功能,本次的迭代将给大家带来 6 大插件的更新~一起来看看有哪些变化吧! 新特性 1. 新增 额外参数v2 插件,支持对转发参数进行加密、拼接等操作…...

突破销售瓶颈:亚马逊卖家如何借力TikTok网红营销?
随着社交媒体的崛起,营销方式也在不断变革。TikTok作为一款风靡全球的短视频平台,吸引了数以亿计的用户,成为了品牌宣传和销售的新热点。对于亚马逊卖家而言,通过合理运用TikTok网红营销策略,可以有效提升产品的曝光度…...
JavaWeb之Cookie的简单使用!!!
什么是Cookie Cookie:客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问 Cookie 数据存放在浏览器端(客户端) 创建Cookie 1.创建Cookie Cookie cookie new Cookie("key","value"); 2.使用response响应…...

16、Flink 的table api与sql之连接外部系统: 读写外部系统的连接器和格式以及Apache Hive示例(6)
Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…...

6.Redis-hash
hash 哈希类型中的映射关系通常称为field-value,⽤于区分 Redis 整体的键值对(key-value),注意这⾥的value是指field对应的值,不是键(key)对应的值,请注意 value 在不同上下⽂的作⽤…...
点云从入门到精通技术详解100篇-多时相机载激光雷达人工林点云匹配及生长监测(续)
目录 多时相机载激光雷达人工林点云匹配及变化监测 3.1 技术路线 3.2 数据准备 3.3 方法...
【Vue3 知识第七讲】reactive、shallowReactive、toRef、toRefs 等系列方法应用与对比
文章目录 一、reactive()二、readonly()三、shallowReactive()四、shallowReadonly()五、isReactive() 和 isReadonly()六、toRef()七、toRefs()八、toRaw()九、ref、toRef、toRefs 异同点 一、reactive() reactive() 函数用于返回一个对象的响应式代理。与 ref() 函数定义响应…...
Docker 摸门级简易手册
Docker 摸门级简易手册 文章目录 Docker 摸门级简易手册使用 Docker 构建 Java 项目镜像Docker 安装Install on MacInstall on WindowsInstall on Linux Dockerfile 说明FROMLABELENVWORKDIRCOPYADDRUNCMDEXPOSEENTRYPOINTVOLUMEUSER 使用 Docker 构建 Java 项目镜像 假设有个…...

Java类加载机制
简介 在Java的世界里,每一个类或者接口,在经历编译器后,都会生成一个个.class文件。 类加载机制指的是将这些.class文件中的二进制数据读入到内存中,并对数据进行校验,解析和初始化。最终,每一个类都会在…...
vue 自定义指令简单记录
自定义指令例子 // src/main.js import { createApp } from vue; import App from ./App.vue;const app = createApp(App);// 全局自定义指令 app.directive(color-directive, {mounted(el, binding) {// 当指令绑定到元素上时触发// el 是绑定的元素// binding 包含了指令的信…...
算法通关村-----快速排序的原理和实现
快速排序介绍 快速排序是一种经典高效的排序方法,是分治策略在排序上的具体体现。将一个大的待排序列分割成若干个小的有序序列,最终将各个小的有序序列合并成一个大的有序序列。 快速排序的实现原理 选择一个基准值,将小于基准值的元素放…...

百度抓取香港服务器抓取超时是什么情况?
网络延迟导致抓取超时 网络延迟是指从发送请求到接收响应之间的时间延迟。如果网络延迟过高,服务器可能无法及时响应请求,导致超时。在香港服务器上抓取数据时,如果网络延迟过高,可能会出现抓取超时的情况。 服务器负载过高可能…...

Springboot上传文件
上传文件示例代码: ApiOperation("上传文件") PostMapping(value "/uploadFile", consumes MediaType.MULTIPART_FORM_DATA_VALUE) public ApiResult<String> uploadFile(RequestPart("file") MultipartFile file) { //调用七…...
kafka教程
kafka教程 Kafka是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统,其主要特点为: 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能高吞吐率。即使在非常…...
JVM的故事—— 内存分配策略
内存分配策略 文章目录 内存分配策略一、对象优先在Eden分配二、大对象直接进入老年代三、长期存活的对象将进入老年代四、动态对象年龄判定五、空间分配担保 一、对象优先在Eden分配 堆内存有新生代和老年代,新生代中有一个Eden区和一个Survivor区(from space或者…...

21.CSS的动态圆形进度条
效果 源码 <!doctype html> <html><head><meta charset="utf-8"><title>Animated Circular Progress | CSS Only</title><link rel="stylesheet" href="style.css"></head><body><di…...

Linux_VMware_虚拟机磁盘扩容
来源文章 :VMware教学-虚拟机扩容篇_vmware虚拟机扩容_系统免驱动的博客-CSDN博客 由于项目逐步的完善,需要搭建的中间件,软件越来越多,导致以前虚拟机配置20G的内存不够用了,又不想重新创建新的虚拟机,退…...

中欧财富:分布式数据库的应用历程和 TiDB 7.1 新特性探索
原文来源: https://tidb.net/blog/ccbaeda2 作者:张政俊, 中欧财富数据库负责人 导读 中欧财富是中欧基金控股的销售子公司,旗下 APP 实现业内基金品种全覆盖,提供基金交易、大数据选基、智慧定投、理财师咨询等…...

树莓 LUMA-OLED.EXAMPLE使用
详细介绍在文件目录下的README.rst中 第一步 $ sudo usermod -a -G i2c,spi,gpio pi //好像没什么用 $ sudo apt install python3-dev python3-pip python3-numpy libfreetype6-dev libjpeg-dev build-essential //安装依赖包,树莓派中好像已经有了 $ sudo a…...

C#,《小白学程序》第十一课:双向链表(Linked-List)其二,链表的插入与删除的方法(函数)与代码
1 文本格式 /// <summary> /// 改进的车站信息类 class /// 增加了 链表 需要的两个属性 Last Next /// </summary> public class StationAdvanced { /// <summary> /// 编号 /// </summary> public int Id { get; set; } 0; ///…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...

图解JavaScript原型:原型链及其分析 | JavaScript图解
忽略该图的细节(如内存地址值没有用二进制) 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么:保存在堆中一块区域,同时在栈中有一块区域保存其在堆中的地址(也就是我们通常说的该变量指向谁&…...

从0开始学习R语言--Day17--Cox回归
Cox回归 在用医疗数据作分析时,最常见的是去预测某类病的患者的死亡率或预测他们的结局。但是我们得到的病人数据,往往会有很多的协变量,即使我们通过计算来减少指标对结果的影响,我们的数据中依然会有很多的协变量,且…...