跳转到内容

条目注册表

查询和修改已注册条目。访问元数据、快照和版本历史。

local registry = require("registry")
{
id = "app.lib:assert", -- string: "namespace:name"
kind = "function.lua", -- string: 条目类型
meta = {type = "test"}, -- table: 可搜索元数据
data = {...} -- any: 条目负载
}
local entry, err = registry.get("app.lib:assert")

权限: 条目 ID 上的 registry.get

local entries, err = registry.find({kind = "function.lua"})
local entries, err = registry.find({kind = "http.endpoint", namespace = "app.api"})

过滤字段与条目元数据匹配。

local id = registry.parse_id("app.lib:assert")
-- id.ns = "app.lib", id.name = "assert"

注册表的时间点视图:

local snap, err = registry.snapshot() -- 当前状态
local snap, err = registry.snapshot_at(5) -- 版本 5 时
方法返回描述
snap:entries()Entry[], error所有可访问条目
snap:get(id)Entry, error按 ID 获取单个条目
snap:find(filter)Entry[]过滤条目
snap:namespace(ns)Entry[]命名空间中的条目
snap:version()Version快照版本
snap:changes()Changes创建变更集
local version, err = registry.current_version()
local versions, err = registry.versions()
print(version:id()) -- 数字 ID
print(version:string()) -- 显示字符串
local prev = version:previous() -- 上一版本或 nil
local next = version:next() -- 下一版本或 nil
local hist, err = registry.history()
local versions, err = hist:versions()
local version, err = hist:get_version(5)
local snap, err = hist:snapshot_at(version)

构建并应用修改:

local snap, err = registry.snapshot()
local changes = snap:changes()
changes:create({
id = "test:new_entry",
kind = "test.kind",
meta = {type = "test"},
data = {config = "value"}
})
changes:update({
id = "test:existing",
kind = "test.kind",
meta = {updated = true},
data = {new_value = true}
})
changes:delete("test:old_entry")
local new_version, err = changes:apply()

权限: changes:apply() 需要 registry.apply

方法描述
changes:create(entry)添加创建操作
changes:update(entry)添加更新操作
changes:delete(id)添加删除操作(字符串或 {ns, name}
changes:ops()获取待处理操作
changes:apply()应用变更,返回新 Version

回滚或前进到特定版本:

local prev = current_version:previous()
local ok, err = registry.apply_version(prev)

权限: registry.apply_version

计算状态转换所需的操作:

local from = {{id = "test:a", kind = "test", meta = {}, data = {}}}
local to = {{id = "test:b", kind = "test", meta = {}, data = {}}}
local ops, err = registry.build_delta(from, to)
for _, op in ipairs(ops) do
print(op.kind, op.entry.id) -- "entry.create"、"entry.update"、"entry.delete"
end
权限资源描述
registry.get条目 ID读取条目(也过滤 find/entries 结果)
registry.apply-应用变更集
registry.apply_version-应用/回滚版本
条件类型
条目未找到errors.NOT_FOUND
版本未找到errors.NOT_FOUND
权限被拒绝errors.PERMISSION_DENIED
无效参数errors.INVALID
无变更可应用errors.INVALID
注册表不可用errors.INTERNAL

参见 错误处理 了解错误处理方法。