全局自定义表格

概述

Global Custom Table(全局自定义表格)是 Edge Admin 提供的强大功能,允许管理员创建和管理自定义数据表,用于存储和组织特定的业务数据。该功能提供了灵活的数据结构定义和管理能力,支持多种数据类型和查询方式。

创建全局自定义表格

步骤 1:访问管理界面

全局自定义表格列表

  1. 登录 Edge Admin 管理后台
  2. 导航至 全局配置 > 全局自定义表格
  3. 点击 新建自定义表格 按钮

步骤 2:配置表格基本信息

自定义表格字段配置

基本配置

  • 表名称:输入表的名称(仅支持英文字母、数字和下划线,用于系统内部标识)
  • 描述:添加表的用途描述,便于后续管理和维护
  • 是否发送事件:当变更表格数据时,是否发送对应的事件通知到相关系统,通常需与 Edge Admin 的 Lua 插件配合使用。

数据字段配置

数据字段是存储业务数据的核心结构,每个字段包含以下属性:

属性说明备注
字段名称数据字段的名称仅支持英文字母、数字和下划线
字段类型数据字段的类型详见下方支持的字段类型
字段描述字段的用途描述可选,便于理解字段含义
缺省值字段的默认值新增数据时的默认填充值
查询键用于查询该行数据的主键
不为 NULL是否允许字段值为空必填字段请勾选此选项
同步是否需要同步到边缘节点影响数据在 Edge Node 的可用性
唯一字段值是否必须唯一用于确保数据完整性

支持的字段类型

类型说明使用场景
文本字符串类型用户名、标题、描述等
数字数值类型年龄、计数、价格等
布尔值真/假值开关状态、是否启用等
IP 地址IPv4/IPv6 地址网络配置、访问控制等
域名域名格式网站地址、服务端点等
数组字符串数组标签列表、分类等
IP 地址数组IP 地址列表白名单、黑名单等
域名数组域名列表多域名配置等

使用示例

以下通过一个完整的用户信息管理示例,演示全局自定义表格的使用方法。

1. 创建用户信息表格

新建自定义表格

创建一个名为 example_users 的用户信息表,包含以下字段:

  • username:用户名(文本类型,查询键,唯一)
  • age:年龄(数字类型)
  • enable:是否启用(布尔值类型)
  • ip:IP 地址(IP 地址类型)
  • domain:域名(域名类型)
  • array:标签数组(数组类型)
  • ip_array:IP 地址列表(IP 地址数组类型)
  • domain_array:域名列表(域名数组类型)

2. 添加测试数据

插入数据

添加一条测试用户数据:

  • 用户名:oredge
  • 年龄:10
  • 启用状态:true
  • IP 地址:1.2.3.4
  • 域名:openresty.com
  • 标签:["openresty", "edge"]
  • IP 列表:["1.2.3.4", "2.3.4.5"]
  • 域名列表:["openresty.com", "doc.openresty.com"]

3. 创建 Lua 查询模块

Lua 模块配置

创建一个名为 check_user 的 Lua 模块,用于查询用户信息:

local ct = require("custom_table")
local cjson_encode = require("cjson.safe").encode
local get_uri_args = ngx.req.get_uri_args
local ngx_say = ngx.say

local _M = {}

function _M.go()
    -- 获取 URI 参数中的用户名
    local uri_args = get_uri_args()
    local username = uri_args.username

    if not username then
        ngx_say("Error: username parameter is required")
        return
    end

    -- 查询用户信息
    local res, err = ct.get("example_users", { username = username })
    if not res then
        ngx_say("Error: ", err or "User Not Found")
        return
    end

    -- 返回用户信息
    ngx_say("Hello ", res.username, ", your info: ", cjson_encode(res))
end

return _M

在 Lua 模块中,通过使用 custom_table 模块来获取自定义数据:

local ct = require("custom_table")
local res, err = ct.get("table_name", { field = "value" })

4. 在应用中引用 Lua 模块

Edge Language 配置

在应用的 Edge Language 规则中调用 Lua 模块:

true =>
    foreign-call(module: "check_user", func: "go");

5. 测试验证

配置发布完成后,进行功能测试:

测试 1:查询存在的用户

$ curl --resolve oredge-example.com:80:127.0.0.1 'http://oredge-example.com/?username=oredge'
Hello oredge, your info: {"enable":true,"domain_array":["openresty.com","doc.openresty.com"],"ip_array":["1.2.3.4","2.3.4.5"],"username":"oredge","domain":"openresty.com","ip":"1.2.3.4","age":10,"array":["openresty","edge"]}

测试 2:查询不存在的用户

$ curl --resolve oredge-example.com:80:127.0.0.1 'http://oredge-example.com/?username=notfound'
Error: User Not Found