使用 Lua 创建自定义插件
APISIX 的主要功能之一是其通过 插件 的可扩展性。除了各种现有插件外,APISIX 还允许你构建自定义插件以添加额外功能并使用自定义流程管理 API 流量。通常,你使用 Lua 编程语言来实现新插件。APISIX 分 阶段 处理请求,相关的插件逻辑在请求路由期间的每个阶段执行。
本指南将引导你完成为 APISIX 开发一个新的自定义 Lua 插件的示例过程。
前置条件
开发文件代理插件
在本节中,你将使用 Lua 为 APISIX 创建一个名为 file-proxy 的新自定义插件。此插件将用于通过 API 公开静态文件(YAML、JSON、JavaScript、CSS 或图像文件)并从指定的 URL 获取文件。
例如,API 用户可以通过指定的 URL http://127.0.0.1:9080/openapi.yaml 访问 openapi.yaml 文件。
创建 Lua 文件
为插件源代码创建一个名为 file-proxy.lua 的新 Lua 文件。
导入模块
为 file-proxy 插件导入必要的模块:
local core = require("apisix.core")
local io = require("io")
local ngx = ngx
定义插件名称
为插件声明一个唯一的名称:
local plugin_name = "file-proxy"
定义插件架构
为插件参数创建一个架构。架构定义了可用参数及其数据类型、属性、默认值、有效值等。
file-proxy 插件需要有一个 文件路径 参数,以便 APISIX 知道在响应中返回其内容之前从哪里读取文件。
local plugin_schema = {
type = "object",
properties = {
path = {
type = "string"
},
},
required = {"path"}
}
❶ 要服务的文件的路径。
❷ 路径设置为必需参数。
定义 Lua 模块表
为插件定义属性 version、priority、name 和 schema