新特性
该插件支持对后端服务返回的响应信息进行过滤,包括响应头部、响应体。过滤的响应体字段或响应头将会被移除,不会返回给客户端,从而避免敏感信息的泄漏。
若此时上游服务返回的响应体为:
{
"code":0,
"data":{
"valid":true,
"scoreMsg":"系统判断为同一人",
"score":0.81,
"score2":0.81,
"incorrect":100,
"message":"比对成功",
"requestId":"d022123ca86945fbb6562a8c90a416f1"
},
"message":"success"
}
使用响应过滤插件过滤响应体字段$.data.requestId
,此时配置为:
{
"body_filter":[
"$.data.requestId"
],
"header_filter":[
]
}
返回客户端的响应体为:
{
"code":0,
"data":{
"valid":true,
"scoreMsg":"系统判断为同一人",
"score":0.81,
"score2":0.81,
"incorrect":100,
"message":"比对成功"
},
"message":"success"
}
当API绑定该插件,请求将不会发送给上游服务,直接返回插件配置的响应内容。
该插件可以适用于以下场景:
在系统升级过程中中可以使用该插件返回特定静态响应内容;
返回静态文件内容,如 HTML 页面、JS 脚本等,减少与后端服务的交互;
API 或页面地址发生迁移,通过该插件将请求重定向到新 API 或新页面;
……
该插件支持引用系统变量,引用格式为:$系统变量字段
,如$request_uri
示例插件配置如下:
{
"body":"",
"content_type":"application/json",
"headers":[
{
"key":"location",
"value":[
"https://www.baidu.com",
"$request_uri"
]
}
],
"status":302
}
若此时请求 API:http://节点IP:端口号/user/info?name=apinto
,插件对该请求拦截后,返回的响应头部中的Location
字段值为https://www.baidu.com/user/info?name=apinto
,响应状态码为302
解析客户端请求上传的文件信息,提取文件请求中的文件后缀、文件大小等信息,将其设置为系统变量,供后续插件使用。
该插件仅支持解析 POST
、PUT
、PATCH
请求方式中的文件参数,并且请求头部 Content-Type
应包含 multipart/form-data
,否则将不会解析文件参数。
插件执行成功后,将会设置以下系统变量:
系统变量可用于填写日志 Formatter 配置,使用方法请参考 Formatter 教程。
解析后端服务返回的文件信息,提取文件请求中的文件后缀、文件大小等信息,将其设置为系统变量,供后续插件使用。
文件响应时应设置 Content-Disposition
响应头部,否则将不会解析文件参数。
插件执行成功后,将会设置以下系统变量:
系统变量可用于填写日志 Formatter 配置,使用方法请参考 Formatter 教程。
Bug 修复
修复 Nacos 服务发现删除后,Apinto连接未断开的问题。
修复计数插件 Redis 模式下死锁的问题。
修复 Prometheus 拉取 Apinto 的 Metrics 时,返回数据格式错误导致读取失败的问题。
修复额外参数 v2 插件表单参数提交失败的问题。
目前 Apinto 及其周边项目已经开源,我们希望通过 Apinto 强大的插件拓展能力,用户可像乐高积木一样根据需要自行拓展 Apinto 的插件,以满足不同的业务市场需求。
Apinto 目前属于萌芽阶段,我们希望集合广大开源爱好者的力量,与大家一起讨论方案,接受大家的批评指正,一起将产品打磨完善,做下一个端与端间的Traffic Middleware。这是一个开放和积极的项目,我们诚挚地邀请您一起参与到我们的项目开源工作中。每一个贡献都是有意义的,包括但不限于:
欢迎各位开源爱好者参与到 Apinto 项目中,和我们一起为开源事业贡献自己的力量!