kong网关使用pre-function插件,改写接口的返回数据

server/2024/12/28 20:36:34/
http://www.w3.org/2000/svg" style="display: none;">

一、背景

kong作为api网关,除了反向代理后端服务外,还可对接口进行预处理。

比如本文提及的一个小功能,根据http header某个字段的值,等于多少的时候,返回一个固定的报文。

使用到的kong插件是pre-function。

https://i-blog.csdnimg.cn/direct/16bd642fc3c143eabcdf2762db1319b1.png" alt="在这里插入图片描述" />

除了上面的场景,还适用于拒绝整个域名的访问。

二、接口的重写

根据http header中的SchoolId,当等于2747时,返回[ { “valid”: false } ];反之,返回 [ { “valid”: true } ]

https://i-blog.csdnimg.cn/direct/9d015871e9fb4a01aae7f58273851693.png" alt="在这里插入图片描述" />

下面是其Lua脚本内容:

local school_id = kong.request.get_header("SchoolId") if school_id == "2747" then return kong.response.exit(200, '[ { "valid": false } ]') else return kong.response.exit(200, '[ { "valid": true } ]') end 

验证:

  • http header 的schoolId = 2747

https://i-blog.csdnimg.cn/direct/365ca7c5bd4d4c93a2ea69298f01a2fc.png" alt="在这里插入图片描述" />

  • http header 的schoolId != 2747

https://i-blog.csdnimg.cn/direct/6da58d5a6394444a9fe491a46fc72c5b.png" alt="在这里插入图片描述" />

三、拒绝域名的请求

同样是使用pre-function插件实现。

https://i-blog.csdnimg.cn/direct/3810b7c84bf84e98a31912d16a46e8bc.png" alt="在这里插入图片描述" />
https://i-blog.csdnimg.cn/direct/bf239fdada9640beb07db073b09603e2.png" alt="在这里插入图片描述" />

Lua脚本内容为:

return kong.response.exit(503, '{code: 400, msg: "xx服务已下线,请联系技术支持处理!"}', {["Content-Type"] = 'application/json' }) 

经验证,域名的接口再次访问,返回报错。

https://i-blog.csdnimg.cn/direct/7885f4a586c74d35bb38056c0764b304.png" alt="在这里插入图片描述" />

四、总结

总之,kong的这款pre-function插件可以适用于许多场景,好处是灵活配置,支持lua脚本。当然,它只返回相对固定的报文,除非你使用Lua脚本去连接数据存储中间件。

不过,对于简单的一些场景够用了,这也提醒我们一点,在客户端请求接口的时候,尽量把一些标识性的字段通过http header上传上来。

比如schoolId 、 userId、 deviceId、ip等等,后期在kong网关便于读取并判断是否拦截请求。


http://www.ppmy.cn/server/154017.html

相关文章

Java中处理if-else的几种高级方法

前言 在我看来多写几个if-else没啥大不了的,但是就是看起来没啥逼格,领导嫌弃。我根据开发的经历写几个不同的替代方法 一、枚举法替代 我先前写了一篇文章,可以去看看。 通过枚举替换if-else语句的解决方案_枚举代替if else c语言-CSDN博…

Xilinx 平台 drp 动态调节 mmcm

分享个人觉得有意思的知识: 什么样的时钟 会输入到 锁相环里 锁相环框图 VCO 控制电压控制频率 DS182 可以查看 VCO 范围 a. 先生成高频 的 VCO b. 再通过 倍频和分频 产生具体各路时钟 c. 怎么控制 输出频率?XAPP888 a. high time 是VCO 高电平 持续…

嵌入式硬件杂谈(七)IGBT MOS管 三极管应用场景与区别

引言:在现代嵌入式硬件设计中,开关元件作为电路中的重要组成部分,起着至关重要的作用。三种主要的开关元件——IGBT(绝缘栅双极型晶体管)、MOSFET(金属氧化物半导体场效应晶体管)和三极管&#…

MetaRename for Mac,适用于 Mac 的文件批量重命名工具

在处理大量文件时,为每个文件手动重命名既耗时又容易出错。对于摄影师、设计师、开发人员等需要频繁处理和整理文件的专业人士来说,找到一款能够简化这一过程的工具是至关重要的。MetaRename for Mac 就是这样一款旨在提高工作效率的应用程序&#xff0c…

WebP Vs. PNG:哪种图像格式适合您的网站?

图像对任何网站都至关重要,可以增强视觉吸引力和用户体验。但是,图像也会显着影响网站的加载时间,因此必须针对 Web 使用对其进行优化。一种方法是使用正确的图像格式。

【MFC】多工具栏如何保存状态(续)

之前我写过一篇: 【MFC】多工具栏如何保存状态 其中的方法有点无奈,经过我最新的研究,有了更好的方法。现在分享给大家。 系统中保存状态是通过: pToolBar->LoadState(strSection);来实现 我原来的方法是绕过,现在考…

go下载依赖提示连接失败

1、现象 Go下载模块提示连接失败 dial tcp 142.251.42.241:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.…

Large Language Model based Multi-Agents: A Survey of Progress and Challenges

一、摘要 背景: 大型语言模型(LLMs)在多种任务中取得了显著的成功,展现出与人类相媲美的规划和推理能力。LLMs被用作自主智能体,自动执行任务,尤其在基于单个LLM的规划或决策智能体的基础上,基于…