API7 网关 AI Agent Skill:serverless 插件
概览
API7 企业版提供两个 serverless 插件,可在请求处理期间执行内联 Lua 函数:
serverless-pre-function— 在指定阶段的开始运行(优先级为 10000,较早执行)。serverless-post-function— 在指定阶段的结束运行(优先级为 −2000,较晚执行)。
两个插件共享相同的配置。函数以 Lua 字符串的形式通过 Admin API 定义,并在加载时编译。
适用场景
- 无需编写完整插件即可注入自定义请求/响应逻辑。
- 快速实现请求头注入、重定向或日志记录原型。
- 添加轻量级前置处理(重写)或后置处理(日志)。
- 根据请求属性动态决定路由。
插件配置参考
| 字段 | 类型 | 是否必填 | 默认值 | 有效值 | 说明 |
|---|---|---|---|---|---|
phase | string | 否 | "access" | rewrite, access, header_filter, body_filter, log, before_proxy | 函数执行的阶段 |
functions | array[string] | 是 | — | Lua 函数字符串 | 函数按顺序执行;每个字符串都必须返回一个函数 |
函数签名
从 API7 企业版(基于 APISIX v2.6+)开始,函数接收两个参数:
return function(conf, ctx)
-- conf:插件配置对象
-- ctx:API7 企业版请求上下文(由各插件共享)
--
-- 可选返回值:
-- return code, body -- 立即退出并返回 HTTP 状态码和响应体
-- return -- 继续执行下一个函数或插件
end
规则:
- 字符串必须返回一个函数,直接使用原始语句会被拒绝。
- 函数会通过 LRU 缓存;更新路由以获取变更。
阶段执行顺序
1. rewrite → 在路由匹配前修改请求
2. access → 执行授权和身份认证检查
3. before_proxy → 在调用上游前进行最后处理
4. header_filter → 修改响应头
5. body_filter → 修改响应体(通过 ngx.arg 分块处理)
6. log → 响应发送后的日志记录(只读)
阶段限制
| 阶段 | 可读请求 | 可修改请求 | 可修改响应 | 可退出 |
|---|---|---|---|---|
| rewrite | ✅ | ✅ | ❌ | ✅ |
| access | ✅ | ✅ | ❌ | ✅ |
| before_proxy | ✅ | ✅ | ❌ | ✅ |
| header_filter | ✅ | ❌ | ✅(响应头) | ❌ |
| body_filter | ✅ | ❌ | ✅(响应体分块) | ❌ |
| log | ✅ | ❌ | ❌ | ❌ |