Skip to content

Registry Server API

源码:apps/registry-server/registryserver/api/routes.py。前缀 /registry/v1

不对公网发布——本服务是容器网内的姊妹服务,消费方(control-server、auth-server)经共享包 dn42_registry.RegistryClient 调用。全部端点挂 service token 鉴权(Authorization: Bearer <service_token>),未配置 token 时整体 fail-closed 403/healthz 除外)。

前缀与姊妹服务同构(/{auth,control,registry}/v1),即便当前只在容器网内可达:三面命名一致,排障时路径本身就说明请求打在哪个服务上;将来若经 api.natlan.io 发布,前置只需按路径转发、无需 rewrite。

发布前置POST /registry/v1/sync 是一次全量重写(上限 300s),全部端点只有 service token 一道闸。要对公网发布得先补限速与来源收窄——不要顺手在 nginx 加一个 location /registry/ 了事。

设计与同步机制见 registry-server 内部,运维见 registry 副本


端点

方法路径说明
GET/status同步状态:commit、各对象计数、同步时刻
POST/sync?force=手动触发一轮同步(与周期循环经锁互斥)。force=1 跳过 sha 门控强制重拉
POST/names批量 ASN → as-name
GET/asns/{asn}单 ASN 记录
GET/asns/{asn}/mntners该 ASN 的维护者列表
GET/asns/{asn}/verification-options该 ASN 可用的归属验证方式(email / pgp / ssh,带来源 mntner)
GET/asns/{asn}/routes该 ASN 起源的全部前缀
GET/asns/{asn}/identityOAuth claims 富化物料
GET/mntners/{name}单维护者记录
GET/key-certs/{fingerprint}按指纹取 PGP 公钥(key-cert 对象)
GET/healthz存活 + DB 连通性(根上,无鉴权)

语义约定

「未收录」统一 404,客户端映射回 None,与消费方内部的可空语义对齐。两个例外刻意不 404

  • GET /asns/{asn}/routes——未收录 ASN 就是空列表 { "asn": …, "route": [], "route6": [] }。调用方要判断的是「这个地址在不在该 AS 名下」,空集是正确答案而非缺失。
  • GET /asns/{asn}/identity——数据不全时逐字段回落 None 或空,OAuth claims 富化不该因为 person 对象缺失就整体失败。

POST /names 请求 { "asns": [<int>, …] },服务端上限 1000;超限按 422 拒绝,不静默截断——调用方是程序,静默截断会让它以为拿全了。响应 { "names": { "<asn>": "<as-name>" } },未收录或无名的 ASN 不出现在结果里。

POST /sync 的错误:未配置上游 token 409;上游拉取失败 502,既有数据保留不被清空。sha 未变时返回 synced=false,这是正常结果不是错误。