APISIX 插件

注意点

插件的生命周期查看 这里

插件的编写用法查看 这里

值得注意的一点是,它的插件是按照 Phase 分层的。 比如有多个优先级不同的插件:A > B > C,他们的Phase执行顺序是: A(rewrite) > B(rewrite) > C(rewrite) > A (access) > B (access) > C (access)

插件编写完毕后需要在config.yamlplugins节点下加入你的插件名,然后调用/apisix/admin/plugins/reload 接口重载下插件即可。 如果发现插件没有生效,或者无法找到插件的提示,可以检查错误日志中的内容,apisix加载插件出错时会记录日志。

全局插件

在记录这篇笔记时,官网还没有关于全局插件的用法介绍。 调查了下,apisix有global rules的对象可以指定全局的插件。

特此记载了下用法

准备一个简单的插件

local core = require("apisix.core")

local plugin_name = "demo-plugin"

local schema = {
    type = "object",
    -- 这里是插件的属性, 详细参数可以参考其他其他插件
    properties = {
        a_fixed_string = { 
            type = "string"
        }, 
    },
}

local _M = {
    version = 0.1,
    priority = 10086,
    name = plugin_name,
    schema = schema,
}

-- 检查插件的定义是否有效
function _M.check_schema(conf)
    local ok, err = core.schema.check(schema, conf)

    if not ok then
        return false, err
    end

    return true
end

-- 插件的rewrite步骤, 步骤的顺序可以参考文档中的链接
function _M.rewrite(conf, ctx)
    -- 通过conf读取预设的参数
    core.log.warn("get a requert, fixed string: " .. conf.a_fixed_string)
    -- 解开下行的注释可以直接返回指定的请求
    -- return 500, { message = "we got a error" }
end

return _M

启用的方法不再累述,参考上面

创建一个GlobalRule对象

curl -X PUT \
  https://{apisix_listen_address}/apisix/admin/global_rules/1 \
  -H 'Content-Type: application/json' \
  -d '{
   "plugins": {
   		"demo-plugin": {
   			"a_fixed_string": "FixedString"
   		}
   }
}'