外观
公开地图接口(natlan.io 首页「lay of the land」栏目)
GET /api/v1/public/map — 无鉴权、公开。一个接口喂两个区块:nodes/links 渲染世界地图,stats 供数据条(节点/会话/路由)三个数字。两面(TS Worker / Python 温备)同形实现。
响应
json
{
"asn": 4242420028,
"updated_at": "2026-07-13T22:14:44.128Z",
"stats": { "nodes_online": 9, "bgp_sessions": 97, "routes": 2401 },
"nodes": [
{ "label": "hkg", "lat": 22.3, "lon": 114.2, "online": true }
],
"links": [ ["can", "hkg"], ["hkg", "tyo"] ]
}| 字段 | 语义 |
|---|---|
asn | 本网 ASN(取自节点 spec node.asn;无节点时 null) |
updated_at | 响应生成时刻(ISO 8601);命中缓存时为缓存生成时刻 |
stats.nodes_online | 在线物理节点数(health 为 ok/degraded 都算在线;stale/down 不算) |
stats.bgp_sessions | 全 fleet established BGP 会话数(内 iBGP + 外 eBGP) |
stats.routes | 各节点路由表规模的中位数(iBGP 收敛后趋同,代表网络表规模;非求和) |
nodes[] | 地图城市点,label 升序。label = IATA 城市码(site);坐标为城市级、四舍五入 1 位小数;online = 该城市任一节点在线 |
links[] | 城市对([a, b],a < b 字典序,整体排序稳定),由节点级 IGP 邻接折叠去重 |
隐私裁剪(不变量)
同城多节点折叠为一个地图点、城内互联自环边剔除——node_id、IP、endpoint、 agent 版本、健康细节一概不出网。nodes[] 元素只有 label/lat/lon/online 四个键。坐标 1 位小数 ≈ 11km 粒度,只到城市级。
缓存与 CORS
Cache-Control: public, max-age=300:浏览器与 CDN 各 5 分钟新鲜度。- TS 面另经 Workers Cache API 缓 300s(缓存键剥查询串——任意随机参数不可穿透)。
- CORS:TS 面
CORS_ORIGINS(当前*)放行;Python 面白名单已加https://natlan.io(生产 TOMLcors_origins)。
前端接法
js
const r = await fetch('https://api.natlan.io/api/v1/public/map');
const { stats, nodes, links } = await r.json();
// nodes → 地图打点(label 即城市码,online 控制点态)
// links → 以 label 查 nodes 坐标连弧线
// stats → 数据条三个数字,替换〔示例〕占位轮询无意义(5 分钟缓存),页面加载取一次即可。