圣堂之魂
开发指南

代码锚点索引表


一、前端暴露接口函数

共 9 个,分布在 api/routes/headless/ 两个链路中。

锚点代码:#_[编号]

编号锚点所在文件说明
#1POST /api/createapi/routes/create.php创建短链(前端链路入口),检查配额、原子写冷存储、同步热存储
#2POST /api/deleteapi/routes/delete.php删除短链(前端链路入口),先删冷后删热、文件锁保护
#3GET /api/listapi/routes/list.php查询所有短链(前端链路入口),读取冷存储并过滤过期条目
#4GET /api/statapi/routes/stat.php查询配额状态(前端链路入口),优先读热存储,不可用时回退冷存储
#5POST /headless/api/createheadless/create.php创建短链(无头链路入口),逻辑同 #1,错误格式为 hl_error
#6POST /headless/api/deleteheadless/delete.php删除短链(无头链路入口),逻辑同 #2,错误格式为 hl_error
#7GET /headless/api/listheadless/list.php查询所有短链(无头链路入口),逻辑同 #3
#8GET /headless/api/statheadless/stat.php查询配额状态(无头链路入口),逻辑同 #4
#9GET /headless/api/get/{code}headless/get.php按短码查询单条短链(无头专属),仅无头链路可用,依次查永久/临时存储

二、内部关键处理函数

共 34 个,分布在 api/common/api/key/api/storage/api/lua/ 及路由文件中。

锚点代码:$_[编号]

编号锚点所在文件说明
$1formatIso8601api/common/helpers.php将 Unix 时间戳格式化为带时区偏移的 ISO 8601 字符串
$2isExpiredapi/common/helpers.php判断临时条目是否已过期(Unix 时间戳比较,时区安全)
$3cleanExpiredEntriesapi/common/helpers.php从数据数组中原地移除过期条目,由 create/delete 写入时调用
$4readFileapi/key/keys.php读取 keys.json 文件,返回常驻 Key、服务 Key 和一次性 Key 池数据
$5writeLockedFileapi/key/keys.php在持有文件锁状态下安全写入 keys 数据(v2.1:备份 + 写入 + 验证 + 回滚)
$6verifyapi/key/keys.php验证 API Key(支持常驻/一次性/服务三种 Key,hash_equals 恒定时间比较防时序攻击,返回 'resident'/'onetime'/'service'/false
$7generateResidentapi/key/keys.php生成新的常驻 Key(返回明文,仅此一次显示,通过 generateRawKey 生成 Base58 密钥)
$8fillPoolapi/key/keys.php将一次性 Key 池补充到最大容量(通过 generateRawKey 生成 Base58 密钥)
$9revokeapi/key/keys.php吊销指定类型的 Key(常驻/一次性/服务/全部)
$10statusapi/key/keys.php获取当前 Key 状态(供 CLI 工具 nurl -look 显示,含常驻/服务/一次性密钥池信息)
$11readapi/storage/json_store.php无锁读取 JSON 文件,返回数据对象(rename 保证原子性)
$12writeapi/storage/json_store.php安全写入 JSON 文件(v2.1:备份 + .php.tmp + rename + 验证 + 回滚)
$13findapi/storage/json_store.php按短码查找条目(大小写不敏感)
$14countapi/storage/json_store.php统计总条目数
$15countActiveapi/storage/json_store.php统计有效(未过期)条目数
$16lockBeginapi/storage/json_store.php获取排他文件锁,用于原子读-检查-写操作
$17readLockedapi/storage/json_store.php在持有排他锁状态下读取数据
$18writeLockedapi/storage/json_store.php在持有排他锁状态下安全写入数据(v2.1:备份 + 写入 + 验证 + 回滚)
$19lockEndapi/storage/json_store.php释放排他文件锁
$20internalPostapi/lua/internal.php内部 POST 请求辅助函数(cURL 与 OpenResty 通信)
$21getKeyStoreapi/common/helpers.php获取全局 KeyStore 单例(延迟初始化,function_exists 守卫防重复定义,4 参数:path/tz/ttl/pool)
$22hl_errorheadless/bootstrap.php无头链路统一错误输出({error:code, message:中文} 格式)
$23checkDataAccessapi/common/helpers.php检查数据文件可读写性,支持文件不存在时检查目录可写性(允许首次部署自动创建),不可访问返回 false(触发 430 错误)
$24checkFileAccessapi/common/helpers.php检查单个文件的可访问性(文件存在检查可读写,不存在检查目录可写)
$25withLockapi/key/keys.php在 flock 排他锁内执行回调(保证 CLI 与 API 操作互斥,统一 inode)
$26永久链去重api/routes/create.php, headless/create.phpttl==0 且未传自定义短码时遍历 perm.json 冷存储,URL 严格匹配则返回已有短码(HTTP 200 + dedup:true)
$27auth_hashapi/key/auth_hash.php认证哈希函数(SHA-256),换算法只改此文件,零依赖
$28auth_extractapi/key/auth_extract.php从 HTTP 请求提取认证凭证(Header/Body 优先级),不做验证,返回 `string
$29auth_verifyapi/key/auth_verify.php验证凭证原文,返回标准 $authCtxvalid/type/reason),不含错误输出;服务密钥在非无头模式下返回 wrong_channel
$30base58_encodeapi/key/base58.phpBase58 编码函数(Bitcoin 标准字母表,bcmath 大整数运算,将二进制数据编码为 Base58 字符串)
$31base58_decodeapi/key/base58.phpBase58 解码函数(Bitcoin 标准字母表,bcmath 大整数运算,将 Base58 字符串还原为二进制数据)
$32generateRawKeyapi/key/keys.php生成原始密钥:random_bytes(32)base58_encode()'su_' 前缀(约 47 字符,替代原 64 字符随机拼接)
$33generateServiceapi/key/keys.php生成服务密钥(永不过期、不限使用次数,仅限无头模式),通过 generateRawKey 生成,存储于 keys.jsonservice 字段,已存在时抛出 RuntimeException
$34getLastInternalErrorapi/lua/internal.php获取最近一次内部通信(internalPost)的 cURL 错误信息,供调用方在同步热存储失败时输出诊断

三、调用外部模块函数

共 28 个,记录所有跨模块调用点。

锚点代码:&_[编号]

编号锚点所在文件调用目标说明
&1internalPostapi/lua/internal.phpinternalPost()internalSet() 内部调用,向 OpenResty POST /internal/set
&2internalPostapi/lua/internal.phpinternalPost()internalDelete() 内部调用,向 OpenResty POST /internal/delete
&3auth_extractapi/common/bootstrap.phpauth_extract()API 链路认证凭证提取
&4auth_verifyapi/common/bootstrap.phpauth_verify()API 链路认证凭证验证,返回 $authCtx
&5auth_extractheadless/bootstrap.phpauth_extract()无头链路认证凭证提取
&6auth_verifyheadless/bootstrap.phpauth_verify()无头链路认证凭证验证,返回 $authCtx
&7internalSetapi/routes/create.phpinternalSet()前端创建去重路径写入热存储(永久链去重命中时同步热存储)
&8auth_hashapi/key/keys.phpauth_hash()哈希运算(verify/generateResident/fillPool/generateService 4 处调用,换算法改 auth_hash.php
&9internalSetapi/routes/create.phpinternalSet()前端创建接口写入热存储
&10internalDeleteapi/routes/delete.phpinternalDelete()前端删除接口清除热存储
&11internalStatapi/routes/stat.phpinternalStat()前端配额接口读取热存储计数
&12internalSetheadless/create.phpinternalSet()无头创建接口写入热存储
&13internalDeleteheadless/delete.phpinternalDelete()无头删除接口清除热存储
&14internalStatheadless/stat.phpinternalStat()无头配额接口读取热存储计数
&15base58_encodeapi/key/keys.phpbase58_encode()Base58 编码(generateRawKey 内调用,将 32 字节随机数编码为 Base58 字符串)
&16generateRawKeyapi/key/keys.phpKeyStore::generateRawKey()密钥生成(generateResident/fillPool/generateService 3 处调用)
&17internalSetheadless/create.phpinternalSet()无头创建去重路径写入热存储(永久链去重命中时同步热存储)
&18generateResidentnurlKeyStore::generateResident()nurl -new 生成常驻密钥
&19fillPoolnurlKeyStore::fillPool()nurl -new 补充一次性密钥池
&20statusnurlKeyStore::status()nurl -look 查看密钥状态
&21generateServicenurlKeyStore::generateService()nurl -svc 生成服务密钥
&22revokenurlKeyStore::revoke()nurl -drop 撤销密钥
&23cleanExpiredEntriesnurlcleanExpiredEntries()nurl -sweep 清理过期条目
&24headlessGetnurl-keyheadlessGet()nurl-key -list 查询短链列表
&25headlessGetnurl-keyheadlessGet()nurl-key -stat 查询配额状态
&26headlessGetnurl-keyheadlessGet()nurl-key -get 查询单条短链
&27headlessPostnurl-keyheadlessPost()nurl-key -add 创建短链
&28headlessPostnurl-keyheadlessPost()nurl-key -rm 删除短链

四、被外部调用的入口

共 3 个,均为 PHP → OpenResty 内部 API 的桥接函数。

锚点代码:%_[编号]

编号锚点所在文件对应端点说明
%1internalSetapi/lua/internal.phpPOST /internal/set写入热存储桥接,被 api/routes/create.phpheadless/create.php 调用
%2internalDeleteapi/lua/internal.phpPOST /internal/delete删除热存储桥接,被 api/routes/delete.phpheadless/delete.php 调用
%3internalStatapi/lua/internal.phpGET /internal/stat读取热存储计数桥接,被 api/routes/stat.phpheadless/stat.php 调用

五、锚点统计

类型标记数量
对外接口函数@外接口_#9
内部关键函数@关键_$34
调用外部模块@外调用_&28
被外部调用入口@外调用入口_%3
合计74

六、文件与锚点分布

1. 公共库 api/common/

文件接口 #内部函数 $调用外部 &被外部调用 %
bootstrap.php&3, &4
helpers.php$1, $2, $3, $21, $23, $24

2. Key 认证 api/key/

文件接口 #内部函数 $调用外部 &被外部调用 %
auth_hash.php$27
auth_extract.php$28
auth_verify.php$29&7
base58.php$30, $31
keys.php$4, $5, $6–$10, $25, $32, $33&8, &15, &16

3. Lua 通信 api/lua/

文件接口 #内部函数 $调用外部 &被外部调用 %
internal.php$20, $34&1, &2%1, %2, %3

4. 冷存储 api/storage/

文件接口 #内部函数 $调用外部 &被外部调用 %
json_store.php$11–$19

5. 前端链路 api/routes/

文件接口 #内部函数 $调用外部 &
create.php#1$26&7, &9
delete.php#2&10
list.php#3
stat.php#4&11

6. 无头链路 headless/

文件接口 #内部函数 $调用外部 &
bootstrap.php$22&5, &6
create.php#5$26&12, &17
delete.php#6&13
list.php#7
stat.php#8&14
get.php#9

7. CLI 工具 nurl

文件调用外部 &
nurl&18, &19, &20, &21, &22, &23

8. CLI 工具 nurl-key

文件调用外部 &
nurl-key&24, &25, &26, &27, &28

本页目录