Apinto 网关 V0.14 版本发布,6 大插件更新!

news2024/9/22 19:36:42

大家好!

距离上次更新已经过去一段时间了,这段日子里我们一直在酝酿新的功能,本次的迭代将给大家带来 6 大插件的更新~一起来看看有哪些变化吧!

新特性

1. 新增 额外参数v2 插件,支持对转发参数进行加密、拼接等操作。

该插件为额外参数插件的升级版本,在v1版本中,我们只能设置静态参数转发给上游服务,存在一定的局限性。

在某些场景,如:对参数进行签名、加密等操作,v1版本无法完成。

额外参数 v2 在 v1 版本的基础上,新增了以下功能特性:

  • 支持引用系统变量(如:请求URI、应用名称等),记录客户端请求特性。
  • 支持对参数进行动态处理。如:md5加密、字符串拼接、获取当前请求时间戳和日期等动态操作。

以字符串拼接为例,我们希望通过拼接请求体参数 nameversiondriver 的方式,生成 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格式进行通信。然而,由于后端服务技术过时,无法进行改造。

为了向用户提供更便利的调用方式,我们可以使用格式转换插件来解决JSONXML之间的互转问题。这样,我们就能够通过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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/959190.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

对话出海企业:2023亚马逊云科技出海日圆桌论坛

在全球经济亟待复苏的今天,持续对外开放是中国未来经济发展重要的“两条腿”之一。在愈发饱和的国内市场,中国企业需要对外寻找全新机遇才能在未来不确定的市场博弈下生存下去。“出海”,也成为近几年最炙手可热的词汇之一,大量中…

ArcGIS Maps SDK for JS(一):概述与使用

文章目录 1 概述2 如何使用ArcGIS Maps SDK for JavaScript2.1 AMD 模块与 ES 模块2.2 AMD 模块和 ES 模块比较 3 几种安装方式3.1 通过 ArcGIS CDN 获取 AMD 模块3.2 通过 NPM 运行 ES 模块3.3 通过 CDN 获取 ES 模块3.4 本地构建 ES3.5 本地构建 AMD 3 VSCode下载与安装2.1 下…

JDK源码解析-LinkedList

1. LinkedList类 1.1 LinkedList类定义&数据结构 定义 LinkedList是一种可以在任何位置进行高效地插入和移除操作的有序序列,它是基于双向链表实现的。 数据结构 基础知识补充 单向链表: element:用来存放元素 next:用来…

Leetcode Top 100 Liked Questions(序号141~189)

​ 141. Linked List Cycle ​ 题意:给你一个链表,判断链表有没有环 我的思路 两个指针,一个每次走两步,一个每次走一步,如果走两步的那个走到了NULL,那说明没有环,如果两个指针指向相等&…

取一个整数各偶数位上的数构成一个新的数字

1 题目 我可太难了,这题我的思路有点复杂,遇到的困难很多,总是值传递搞不清楚,地址传递总是写错。 从低位开始取出一个整数s的各奇数位上的数,剩下的偶数位的数依次构成一个新数t。 例如: 输入s&#xff…

VB:水仙花数问题

VB:水仙花数问题 Private Sub Command1_Click()Rem 水仙花数问题Dim x%, a%, b%, c%, z%n 0For x 100 To 999a Fix(x / 100) Fix函数是去尾的作用,只保留整数部分,当然也可以直接用整除(\)b Fix((x - a * 100) / 10)c x Mod 10z a ^ 3…

C语言中的分支和循环语句:从入门到精通

分支和循环语句 1. 前言2. 预备知识2.1 getchar函数2.2 putchar函数2.3 计算数组的元素个数2.4 清屏2.5 程序的暂停2.6 字符串的比较 3. 结构化3.1 顺序结构3.2 分支结构3.3 循环结构 4. 真假性5. 分支语句(选择结构)5.1 if语句5.1.1 语法形式5.1.2 else…

人气总冠军-商艺馨 | 第11季中国好猫步辽宁总决赛

第十一季中国好猫步 辽宁总决赛 中国好猫步少儿模特赛事活动属于CCAC大满贯赛事中的大师赛,一直以来,以华丽的舞美、创意丰富的赛制、贴心的服务、丰厚的奖励和众多媒体曝光优势,成为无数少儿模特梦寐以求登上的舞台!并且多次登上…

CG MAGIC进行实体渲染后!分析渲染器CR和VR的区别之处!

新手小白来说,如何选择渲染器,都会提出疑问? 渲染效果图究竟用CR渲染器还是VR渲染器呢? 今天,CG MAGIC小编通过一个真实的项目场景,实例渲染之后,CR渲染器和VR渲染器区别有哪几点? 1…

Java里面单向链表实现

Java里面单向链表实现 说明代码 说明 这里记录下单向链表实现。并在类里面写了一些新增和删除方法。 代码 package com.example.test;//单向链表类 public class Node {//结点的值public int val;//当前结点的后继结点,当 next null 时,代表这个结点是所在链表的…

VB:求1000以内的质数

VB:求1000以内的质数 Private Sub Command1_Click() Dim m%, i%, p%, k%, n% For m 2 To 1000 求1000以内的质数,2是最小的质数p 1k Int(Sqr(m))For i 2 To kIf m Mod i 0 Thenp 0Exit ForEnd IfNext iIf p 1 ThenPrint Tab((n Mod 10) * 5 2);…

20. python从入门到精通——Flask框架

目录 安装虚拟环境和Flask 第一个Flask程序 Flask的调试模式 路由 变量规则:当在页面中输出变量的时候就需要遵循变量的规则 构造URL 在route函数中设置http方法 获取静态文件路径 蓝图 模板 Web表单 CSRF 安装虚拟环境和Flask Flask框架主要依赖两个库…

Java“牵手”1688图片识别商品接口数据,图片地址识别商品接口,图片识别相似商品接口,1688API申请指南

1688商城是一个网上购物平台,售卖各类商品,包括服装、鞋类、家居用品、美妆产品、电子产品等。要通过图片地址识别获取1688商品列表和商品详情页面数据,您可以通过开放平台的接口或者直接访问1688商城的网页来获取商品详情信息。以下是两种常…

layui实现数据列表的复选框回显

layui版本2.8以上 实现效果如图&#xff1a; <input type"hidden" name"id" id"id" value"{:g_val( id,0)}"> <div id"tableDiv"><table class"layui-hide" id"table_list" lay-filter…

CPSC上月召回案例(2023年7月)

每年的夏末秋初为美国产品热销节日&#xff08;感恩节、万圣节、黑五&#xff09;的备货期&#xff0c;卖家在大量备货的同时&#xff0c;务必保障自身产品通过相关安全测试&#xff0c;以免造成不必要的损失&#xff01; 以下是五祥列举出的上月被CPSC召回产品&#xff0c;作…

技术分享 | LSM,Linux 内核的安全防护盾

计算机安全是一个非常重要的概念和主题&#xff0c;它不仅仅可以保护用户个人信息和资产的安全&#xff0c;还可以影响到用户在使用过程中的体验&#xff1b;但同时&#xff0c;它也是一个很抽象的概念&#xff0c;关于其相关文献和资料不计其数&#xff0c;但它究竟是什么、包…

相机成像原理【二】

文章目录 1、小孔成像的缺陷1.1 引入透镜 2、薄透镜成像原理2.1 薄透镜工作原理2.2 光线穿过透镜如何前进2.3 光线追踪 3、薄透镜成像公式3.1 高斯成像公式3.2 物距、像距、放大率之间特殊的关系 4、透镜成像特性4.1 对焦4.2 景深 1、小孔成像的缺陷 小孔尺寸过小&#xff0c;图…

iBooker 技术评论 20230831

一、轻资产项目的五类分类 轻资产项目不需要投资&#xff0c;但也不是所有人都做得了&#xff0c;取决于个人认知和能力水平限制。 就好比以前的各科题目&#xff0c;你也不是都能做吧&#xff1f; 我以前刷题的时候&#xff0c;喜欢把题目按照难易程度分五类。现在做项目和…

【python爬虫】11.让爬虫按时向你汇报

文章目录 前言定时与邮件明确目标分析过程爬虫发送邮件定时 代码组装复习 前言 上一关我们学习了selenium&#xff0c;它有可视模式与静默模式这两种浏览器的设置方法&#xff0c;二者各有优势。 然后学习了使用.get(‘URL’)获取数据&#xff0c;以及解析与提取数据的方法。…

【校招VIP】java语言考点之关键字static

考点介绍&#xff1a; static考点是面试的高频考点&#xff0c;一般从容易到难提问&#xff0c;比如从static的含义和理解、到JVM的存储或者到线程安全性&#xff0c;再到单例模式等。 java语言考点之关键字static 相关题目及解析内容可点击文章末尾链接查看&#xff01; 一…