Python|Python 带你快速上手 Apache APISIX 插件开发
admin
2023-08-16 05:22:12
0

目录

  • 一、了解:项目架构
  • 二、安装:部署测试
    • 1. 下载安装 Python Runner
    • 2. 配置 Python Runner
    • 3. 启动 Python Runner
    • 4. 测试 Python Runner
  • 三、实践:插件开发
    • 1. 插件目录
    • 2. 插件示例
    • 3. 插件格式
    • 4. 插件规范及注意事项
前言:
熟悉 Apache APISIX 的小伙伴都知道,之前在社区中我们已经支持了 Java 和 Go 语言的 Runner,今天 Apache APISIX Python Runner 也来了,社区中的小伙伴们在开发 Apache APISIX 插件时又多了一种新选择。
Python 语言作为一个解释型的高级编程语言,它语法简洁易上手、代码可读性好 ,在跨平台 、可移植性 、开发效率上都有很好的表现,同时作为一个高级编程语言它的封装抽象程度比较高屏蔽了很多底层细节(例如:GC )让我们在开发的过程中可以更专注应用逻辑的开发。
同时作为一个有 30 年历史的老牌开发语言,它的生态以及各种模块已经非常完善,我们大部分的开发和应用场景都可以从社区中找到很成熟的模块或解决方案。
Python 其他的优点就不再一一赘述,当然它的缺点也比较明显:Python 作为一门解释性语言,相较于 C++ 和 Go 这样的编译型语言,在性能上的差距还是比较大的。

一、了解:项目架构 apache-apisix-python-runner 这个项目可以理解为 Apache APISIX Python 之间的一道桥梁,通过 Python Runner 可以把 Python 直接应用到 Apache APISIX 的插件开发中,最重要的还是希望让更多对 Apache APISIX 和 API 网关感兴趣的 Python 开发者通过这个项目,更多地了解和使用 Apache APISIX,以下为 Apache APISIX 多语言支持的架构图。
Python|Python 带你快速上手 Apache APISIX 插件开发
文章图片

上图左边是 Apache APISIX 的工作流程,右边的 Plugin Runner 是各语言的插件运行器,本文介绍的 apisix-python-plugin-runner 就是支持 Python 语言的 Plugin Runner
Apache APISIX 中配置一个 Plugin Runner 时,Apache APISIX 会启动一个子进程运行 Plugin Runner,该子进程与 Apache APISIX 进程属于同一个用户,当我们重启或重新加载 Apache APISIX 时,Plugin Runner 也将被重启。
如果你为一个给定的路由配置了 ext-plugin-* 插件,请求命中该路由时将触发 Apache APISIX 通过 Unix Socket Plugin Runner 发起 RPC 调用。调用分为两个阶段:
  • ext-plugin-pre-req :在执行 Apache APISIX 内置插件(Lua 语言插件)之前
  • ext-plugin-post-req :在执行 Apache APISIX 内置插件(Lua 语言插件)之后
大家可以根据需要选择并配置 Plugin Runner 的执行时机。Plugin Runner 会处理 RPC 调用,在其内部创建一个模拟请求,然后运行多语言编写的插件,并将结果返回给 Apache APISIX
多语言插件的执行顺序是在 ext-plugin-* 插件配置项中定义的,像其他插件一样,它们可以被启用并在运行中重新定义。

二、安装:部署测试 基础运行环境:Apache APISIX 2.7、Python 3.6+
Apache APISIX 的安装部署可参考 Apache APISIX 官方文档:如何构建 Apache APISIX (https://github.com/apache/api...)进行部署。

1. 下载安装 Python Runner
$ git clone https://github.com/apache/apisix-python-plugin-runner.git$ cd apisix-python-plugin-runner$ make install


2. 配置 Python Runner
  • 开发模式配置
运行 Python Runner:

    $ cd /path/to/apisix-python-plugin-runner$ APISIX_LISTEN_ADDRESS=unix:/tmp/runner.sock python3 apisix/main.py start修改 Apache APISIX 配置文件$ vim /path/to/apisix/conf/config.yamlapisix:admin_key:- name: "admin"key: edd1c9f034335f136f87ad84b625c8f1role: adminext-plugin:path_for_test: /tmp/runner.sock

  • 生产模式配置
修改 Apache APISIX 配置文件

    $ vim /path/to/apisix/conf/config.yamlapisix:admin_key:- name: "admin"key: edd1c9f034335f136f87ad84b625c8f1role: adminext-plugin:cmd: [ "python3", "/path/to/apisix-python-plugin-runner/apisix/main.py", "start" ]

  • Python Runner 配置(可选)
如果需要对 Log Level Unix Domain Socket 环境变量调整可以修改 Runner 的配置文件
$ vim /path/to/apisix-python-plugin-runner/apisix/config.yamlsocket:file: $env.APISIX_LISTEN_ADDRESS # Environment variable or absolute pathlogging:level: debug # error warn info debug


3. 启动 Python Runner
$ cd /path/to/apisix# Start or Restart$ ./bin/apisix [ start | restart ]

启动或重启 Apache APISIX 即可,此时 Apache APISIX Python Runner 已经完成配置并启动。

4. 测试 Python Runner
配置 Apache APISIX 路由及插件信息:

# 使用默认demo插件进行测试$ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '{"uri": "/get","plugins": {"ext-plugin-pre-req": {"conf": [{ "name": "stop", "value":"{\"body\":\"hello\"}"}]}},"upstream": {"type": "roundrobin","nodes": {"127.0.0.1:1980": 1}}}'

  • plugins.ext-plugin-pre-req.confRunner 插件配置,conf 为数组格式可以同时设置多个插件。
  • 插件配置对象中 name 为插件名称,该名称需要与插件代码文件和对象名称一致。
  • 插件配置对象中 value 为插件配置,可以为 JSON 字符串。
访问验证:
$ curl http://127.0.0.1:9080/get -iHTTP/1.1 200 OKDate: Fri, 13 Aug 2021 13:39:18 GMTContent-Type: text/plain; charset=utf-8Transfer-Encoding: chunkedConnection: keep-alivehost: 127.0.0.1:9080accept: */*user-agent: curl/7.64.1X-Resp-A6-Runner: PythonServer: APISIX/2.7Hello, Python Runner of APISIX


三、实践:插件开发
1. 插件目录
/path/to/apisix-python-plugin-runner/apisix/plugins

此目录中的 .py 文件将会被自动加载。

2. 插件示例
/path/to/apisix-python-plugin-runner/apisix/plugins/stop.py/path/to/apisix-python-plugin-runner/apisix/plugins/rewrite.py


3. 插件格式
from apisix.runner.plugin.base import Basefrom apisix.runner.http.request import Requestfrom apisix.runner.http.response import Responseclass Stop(Base):def __init__(self):"""Example of `stop` type plugin, features:This type of plugin can customize response `body`, `header`, `http_code`This type of plugin will interrupt the request"""super(Stop, self).__init__(self.__class__.__name__)def filter(self, request: Request, response: Response):"""The plugin executes the main function:param request:request parameters and information:param response:response parameters and information:return:"""# 在插件中可以通过 `self.config` 获取配置信息,如果插件配置为JSON将自动转换为字典结构# print(self.config)# 设置响应头信息headers = request.headersheaders["X-Resp-A6-Runner"] = "Python"response.headers = headers# 设置响应体信息response.body = "Hello, Python Runner of APISIX"# 设置响应状态码response.status_code = 201# 通过调用 `self.stop()` 中断请求流程,此时将立即响应请求给客户端# 如果未显示调用 `self.stop()` 或 显示调用 `self.rewrite()`将继续将请求# 默认为 `self.rewrite()`self.stop()


4. 插件规范及注意事项
  • 实现插件对象必须继承 Base
  • 插件必须实现 filter 函数
  • filter 函数参数只能包含 Request Response 类对象作为参数
  • Request 对象参数可以获取请求信息
  • Response 对象参数可以设置响应信息
  • self.config 可以获取插件配置信息
  • filter 函数中调用 self.stop() 时将马上中断请求,响应数据。
  • filter 函数中调用 self.rewrite() 时,将会继续请求。
【Python|Python 带你快速上手 Apache APISIX 插件开发】到此这篇关于Python 带你快速上手 Apache APISIX 插件开发的文章就介绍到这了,更多相关PythonApache APISIX 插件开发内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关内容

热门资讯

个... 随着社交网络的发展,我们越来越需要一个工具来监督我们的工作、记录我们的生活和学习。 但在豆瓣、简书、...
俄... 地球上有三个雷区是绝对不能碰的:俄罗斯禁酒、中国贩毒、美国逃税。 在美国,你也许可以智取CIA、戏弄...
3... 模式容易复制,竞争激烈,所以品牌影响力和用户活跃度更重要。 我们需要更好的客户体验、更具竞争力的价格...
O... [下载链接]:软件说明Origin 是 Windows 操作系统中使用的数据和科学图形数值分析软件。...
C... 1. 清理我的电脑作为一款清理电脑垃圾的软件,CleanMyPC并不像一些流氓软件。 电脑运行一段时...
W... Word转PDF最好的免费软件有哪些?这些Word转PDF软件值得收藏在日常生活中,大家经常使用Wo...
(... 阅读本文前,请先点击“关注”,这不仅方便您的讨论和分享,还能给您不一样的参与感。 感谢您的支持。【介...
4... 据中国软件信息网4月21日报道,BigData-Research(BDR)最新发布的《2015年4月...
常... 随着技术的不断发展,3D建模技术已经成为各个行业的重要组成部分,如影视、游戏、建筑、工业设计等领域。...
“... ‍‍▼据《新西兰先驱报》报道,新西兰食品价格年增长率达到10.1%,创14年来新高。新西兰统计局数据...
国... 在国家和社会推动的各项建设事业中,在人民群众的日常生活中,始终离不开“税”字。 可以说,税收的基础和...
“... 大家好,我叫大卫。您的电脑上安装了“计算机管理器”吗? 您是否总是因为电脑上没有管家软件而感到不安?...
2... 2分钟教你如何选择合适的激光打标机。今天我就告诉大家如何选择激光打标机。 我们的光纤激光打标机目前市...
使... 很多客户在使用雕刻机时都会遇到断刀的情况,大部分是由于使用不熟练、操作不当造成的。 也有少部分顾客出...
想... 如果我想录制歌曲该怎么办?去录音室吗? 太贵了!使用某个卡拉 OK 酒吧吗? 太低!你要做的事情还有...
数... 数控雕刻机是数控技术与雕刻技术相结合的产物。 它是一种专用数控机床。 与一般数控机床类似,数控雕刻机...
没... 没有光学系统,激光打标机就无法正常工作。 根据激光打标机工作方式的不同,光学系统也多种多样。 当它们...
O... 大家好,今天给大家推荐一款非常棒的影视神器。 它真的很容易使用,两端都可以使用。 已在AppStor...
免... 尊敬的老师们,今天我向大家推荐一款免费的微课录屏软件,它就是“EV录屏”。 EV录屏是一款集本地视...
免... 很多会计学生虽然有会计证书,但经验很少,一谈到会计就感到困惑。 他们没有接触过金融免费记账软件哪个好...