API 参考

亚太统计分析系统的 REST 接口。全部数据来自公开来源(世界银行 Open Data · 中国国家统计局 · 中国海关总署),标识符在服务端按请求语言本地化。

Base URL https://qu-stat-system.vercel.app
local: http://127.0.0.1:5000
鉴权公开端点无需鉴权;管理端点需 X-Admin-Token 或 ?token=
响应格式JSON / CSV / Markdown(按端点)
缓存接口与 HTML no-store;静态资源 1 年 immutable(URL 带内容哈希)
本页目录

通用约定

语言参数 lang

?lang=en|zh 优先;缺省读 Accept-Language,再退回 en(与产品默认语言一致)。页面 <html lang> 与分享卡片语言同源。

标识符的三把键

数据表里存的是中文规范键,本地化只发生在服务端一处。每条记录同时给出:field(当前语言的展示值)、field_key(中文规范键)、field_slug(ASCII 稳定键)。请求参数接受三者任一,因此英文调用方不必维护任何中文词表。

未登记词条原样返回

标签包未收录的词条按原文返回,不抛异常——向前兼容新增数据。反过来,无法解析的维度(如 ?dimension=Atlantis)也原样透传后查不到数据,不会静默替换为默认值。

错误约定

校验失败返回 {"ok": false, "error": "…"} 并带 400;鉴权失败 403;找不到 404;上游数据源失败 502。错误文案按 lang 本地化。

安全响应头

所有响应带 X-Content-Type-Options: nosniff、X-Frame-Options: SAMEORIGIN、Referrer-Policy: strict-origin-when-cross-origin、Permissions-Policy 与收敛到 'self' 的 CSP;HTTPS 下追加 HSTS。项目零外部 CDN 依赖(字体走系统字体栈)。

数据来源与许可

世界银行 Open Data(CC BY 4.0 公共许可)、中国国家统计局与中国海关总署公开发布物。本项目仅使用公开数据,不含任何内部或涉密数据。

接口一览

页面与静态资源

GET/公开

落地页

产品介绍、能力说明与数据源声明,首屏统计数字由 /api/stats 实时填充。

参数类型必填说明
langen | zh否决定 <html lang> 与分享卡片语言;缺省按 Accept-Language,再退回 en。

示例

curl -s "$BASE/?lang=en"
GET/app公开

数据看板

看板主界面:智能查询、指标总表、自定义分析、统计公报、图表五个工作台。

参数类型必填说明
langen | zh否界面语言占位符 zh-CN 的取值来源。

示例

curl -s "$BASE/app?lang=zh"
GET/docs公开

本页

API 参考。内容按 ?lang= 服务端渲染,无需 JavaScript。

参数类型必填说明
langen | zh否文档语言。

示例

curl -s "$BASE/docs?lang=en" | less
GET/privacy公开

隐私与数据声明

对外分发后最常被问的三件事(收集什么 / 数据从哪来 / AI 会不会把问题发出去)的固定答案。同样服务端渲染、零 JS。

参数类型必填说明
langen | zh否声明语言。

示例

curl -s "$BASE/privacy?lang=en"
GET/theme.css · /style.css · /landing.css · /app.js · /app.charts.js · /app.palette.js · /app.indicators.js · /app.custom.js · /app.bulletin.js · /i18n.js · /i18n-dict.js · /i18n-dict-landing.js公开

前端资源

十二份前端资源:主题令牌 / 看板样式 / 落地页样式 / 看板逻辑 / 图表分块 / 命令面板分块 / 指标总分块 / 自定义分析分块 / 统计公报分块 / 双语运行时 / 全量词表 / 落地页词表。页面引用时每个资产各带自己的 内容哈希版本号 ?v=<sha256 前 12 位>,因此可以放心长缓存;改一个资产只换它自己的 URL,不会连带把别的资产也顶失效。/app.charts.js、/app.palette.js、/app.indicators.js、/app.custom.js 与 /app.bulletin.js 是 按需加载的分块:core(/app.js)只在首次用到时才动态拉取,首屏不下发。

无请求参数。

示例

curl -sI "$BASE/style.css" | grep -i cache-control
GET/og-image.png · /favicon.svg · /favicon.ico公开

图标与分享卡片

og-image.png 为 1200×630 社交分享卡片(由 scripts/make_og_image.py 生成后 base64 内嵌,见 src/pages.py)。/favicon.ico 301 跳到 /favicon.svg:部分浏览器与爬机不看 <link rel=icon> 声明仍会直接要它,仓库里只有 SVG 图标,不重定向 就等于每次首访白吃一个 404。

无请求参数。

示例

curl -sI "$BASE/og-image.png" | grep -i content-type
GET/robots.txt · /sitemap.xml公开

SEO 资源

爬虫协议与站点地图,缓存 1 小时。

无请求参数。

示例

curl -s "$BASE/robots.txt"

数据接口

GET/api/stats公开

数据规模

公开只读的聚合计数(记录数、知识条目数、覆盖经济体与年份),供落地页与看板侧栏展示。不含库路径等环境细节——那些在管理端点 /api/db。

无请求参数。

示例

curl -s "$BASE/api/stats"
GET/api/overview公开

概览卡片

按年份 + 维度返回关键指标卡片,每张卡片含本地化展示值、*_key(中文规范键)与 *_slug(ASCII 稳定键);同时返回下拉框可选项。

参数类型必填说明
yearint否年份,缺省 2024。
dimensionstr否经济体:接受规范键(中国)、英文标签(China)或 slug(china);缺省 亚太 聚合口径。
langen | zh否本地化语言。

示例

curl -s "$BASE/api/overview?year=2024&dimension=china&lang=en"
GET/api/insights公开

数据洞察

从本地公开数据算出可复算的年度变化:该维度同比变化最大的指标、覆盖最广指标上名次变动最大的经济体,以及本年度真实覆盖规模。每条洞察都带两年数值,可用 /api/indicators 复核;上一年缺失或为 0 的指标不进榜单,不给误导性百分比。

参数类型必填说明
yearint否年份,缺省 2024。洞察为「当年 vs 上一年」。
dimensionstr否经济体:接受规范键、英文标签或 slug;缺省 亚太 聚合口径。
langen | zh否本地化语言。

示例

curl -s "$BASE/api/insights?year=2024&dimension=china&lang=en"
GET/api/indicators公开

指标宽表

面向程序消费的主要数据接口。每行的 category / indicator / dimension / unit 按 lang 本地化,并并列给出 *_key 与 *_slug——英文消费方无需任何中文词表即可使用。

参数类型必填说明
yearint否缺省表示跨年全量。
dimensionstr否经济体(键 / 标签 / slug 皆可)。
categorystr否专业分类。
indicatorstr否指标名(键 / 标签 / slug 皆可)。
qstr否模糊搜索:同时匹配原始行与本地化行的全部字段(中英文均命中)。
langen | zh否本地化语言。

示例

curl -s "$BASE/api/indicators?indicator=GDP&year=2024&lang=en"
# 或按关键词搜索(中英均可)
curl -s "$BASE/api/indicators?q=retail" | head -40
GET/api/export.csv公开

CSV 导出

把当前筛选结果导出为 CSV。列固定为 year,category,indicator,dimension,value,unit,note,内容带 BOM(utf-8-sig)以便 Excel 直接打开;文件名含年份、维度 slug 与语言。

参数类型必填说明
year · dimension · indicator · category · q · lang—否与 /api/indicators 完全一致。

示例

curl -s "$BASE/api/export.csv?year=2024&dimension=china&lang=en" \
  -o indicators_2024_china_en.csv
GET/api/indicator_keys公开

可绑定指标键

返回全部可绑定指标的三元组(专业 / 指标 / 维度),供「新建自定义分析」的变量下拉选择使用。

参数类型必填说明
langen | zh否本地化语言。

示例

curl -s "$BASE/api/indicator_keys?lang=en"
GET/api/custom公开

自定义分析(查询)

不带 name 时返回分析列表(含中英名称);带 name 时求值并返回结果,compare 为真时附同比 yoy。名称中英皆可命中。

参数类型必填说明
namestr否分析名称;缺省列出全部。
yearint否求值年份,缺省 2024。
langen | zh否本地化语言。

示例

curl -s "$BASE/api/custom?name=GDP&lang=en"
POST/api/custom公开

自定义分析(新增)

追加一条分析到配置文件。表达式在占位值上预校验可求值,且不允许重复名称;变量取值失败时返回 error 字段而不抛异常。

无请求参数。

请求体

JSON 请求体:
{
  "name": "第三产业占比",          // 必填,中文规范名
  "name_en": "Tertiary share",      // 可选,英文展示名
  "unit": "%",
  "description": "…",
  "description_en": "…",
  "variables": {                    // 必填,变量名 -> [专业, 指标, 维度(可选)]
    "x": ["国民经济", "第三产业增加值", "中国"],
    "y": ["国民经济", "GDP", "中国"]
  },
  "expr": "x / y * 100",            // 必填,安全求值
  "compare": true                   // 可选,是否计算同比
}

示例

curl -s -X POST "$BASE/api/custom" \
  -H 'Content-Type: application/json' \
  -d '{"name":"Tertiary share","variables":{"x":["国民经济","第三产业增加值","中国"]},"expr":"x"}'
GET/api/report公开

统计公报

按年份 + 维度生成公报。format=json 返回结构化数据(标识符已由服务端本地化,交前端渲染);缺省返回纯文本 Markdown。cloud=1 时附云端 AI 解读。

参数类型必填说明
yearint否缺省 2024。
dimensionstr否经济体,缺省 亚太。
cloud0 | 1否是否请求云端 AI 解读。
formatjson否出现即为 JSON,否则文本。
langen | zh否本地化语言。

示例

curl -s "$BASE/api/report?year=2024&format=json&lang=en"

解读接口

GET/api/ask公开

自然语言查询

把一句自然语言问题解析为指标查询并返回统计结果。cloud=1 时,本地统计结果先作为事实上下文再交给云端模型(提示词中明确要求只依据给定数字),避免模型编造数据;云端不可用时退回本地统计并在 注 字段说明。

参数类型必填说明
textstr是自然语言问题,如 2024年GDP 或 retail sales。
dimensionstr否限定经济体。
cloud0 | 1否是否调用云端 AI 解读。
langen | zh否本地化语言(同时决定云端提示词语言)。

示例

curl -s "$BASE/api/ask?text=2024%20GDP&lang=en&cloud=0"
GET/api/infini_skill公开

集成自检

按 agent_infini Skill 规范返回推荐工作流与资源预检结果;只读、不触发任何云端调用,CLI 不可用时优雅降级。

参数类型必填说明
dbstr否逗号分隔的数据库标识,用于核验是否已启用。
ragstr否逗号分隔的 RAG 知识库标识,用于核验是否已启用。

示例

curl -s "$BASE/api/infini_skill"
GET/api/ai-cache公开

解读缓存指标

AI 解读缓存的运行指标:命中 / 未命中计数、L1 容量、Redis 是否可用。只读、无副作用,用来验证「重复提问真的没有重复打云端」。

无请求参数。

示例

curl -s "$BASE/api/ai-cache"

知识库接口

GET/api/knowledge公开

知识库(查询)

列出或搜索知识条目;命中结果会作为本地统计的补充上下文出现在问答结果中。

参数类型必填说明
qstr否关键词搜索;缺省列出全部。
categorystr否按分类过滤。

示例

curl -s "$BASE/api/knowledge?q=GDP"
POST/api/knowledge公开

知识库(新增)

新增一条知识条目,title 与 content 必填。

无请求参数。

请求体

JSON 请求体:{"title": "…", "content": "…", "category": "通用", "tags": "gdp,trade", "source": "…"}

示例

curl -s -X POST "$BASE/api/knowledge" \
  -H 'Content-Type: application/json' \
  -d '{"title":"GDP 口径","content":"…"}'
DELETE/api/knowledge公开

知识库(删除)

按 id 删除条目。

参数类型必填说明
idint是条目 ID。

示例

curl -s -X DELETE "$BASE/api/knowledge?id=1"

管理接口(需令牌)

GET/api/db需管理令牌

库状态

返回数据库路径、引擎、体积与各表行数。含环境细节,故列入管理端点。

无请求参数。

示例

curl -s "$BASE/api/db" -H "X-Admin-Token: $ADMIN_TOKEN"
POST/api/reseed需管理令牌

重新播种

清空指标表后重新载入内嵌的真实公开数据种子集,并清除 KV 旧快照。会覆盖库内数据。

无请求参数。

示例

curl -s -X POST "$BASE/api/reseed" -H "X-Admin-Token: $ADMIN_TOKEN"
GET/api/kv-status需管理令牌

KV 状态

检查 Redis / Vercel KV 持久化连接:环境变量存在性(已脱敏)、写入与回读。

无请求参数。

示例

curl -s "$BASE/api/kv-status" -H "X-Admin-Token: $ADMIN_TOKEN"
POST/api/collect需管理令牌

数据采集

从世界银行 Open Data 拉取指定指标并入库(公开数据源,无需鉴权)。需要可写磁盘,故线上默认关闭。

无请求参数。

请求体

JSON 请求体:{"source": "worldbank" | "global", "year": 2024, "country": "CN", "indicators": "NY.GDP.MKTP.CD"}

示例

curl -s -X POST "$BASE/api/collect" \
  -H 'Content-Type: application/json' -H "X-Admin-Token: $ADMIN_TOKEN" \
  -d '{"source":"worldbank","year":2024,"indicators":"NY.GDP.MKTP.CD"}'

运维接口

GET/healthz公开

健康检查

探活端点:始终返回 200,用 status 区分健康与降级。不播种、不鉴权,适合部署平台的存活探针与外部监控;version 用来确认线上跑的是哪一版,uptime_s 则暴露「刚刚重启过」这个排查线索。

无请求参数。

示例

curl -s "$BASE/healthz"

管理端点未配置 QU_STAT_ADMIN_TOKEN 时:本地开发放行,部署到 Vercel 一律 403(无持久盘,重播种 / 抓取也无处落库)。

亚太统计分析系统 · 仅使用官方公开数据 隐私与数据声明 · GET /docs?lang=en · https://qu-stat-system.vercel.app/sitemap.xml