内容输出,一站抵主站。

AxionServe Content Edge —— 为 axionserve.com 输出文章 / 学院 / 行情 / 站点地图的内容资源层:边缘缓存、sitemap 同域代理、BFF 直调,皆为一等公民。

文章 — 课程 — 行情 — sitemap URL — 版本 4.10.0 延迟 — 节点 —

站点地图 & SEO 资源输出

所有 <loc> 指向 https://axionserve.com(env SITE_ORIGIN 可改)。主站将下列路径原样代理即获得同域有效 sitemap —— 搜索引擎只需提交主站 /sitemap.xml。本主机 robots.txt 已全站 Disallow,不与主站争收录。

XML

/sitemap.xml

索引地图 — 聚合三个子图,lastmod 实时取自内容更新时间。

打开 ↗
XML

/sitemap-articles.xml

已发布文章 → /{category}/{slug}(weekly · 0.7)。

打开 ↗
XML

/sitemap-courses.xml

已发布课程 → /academy/{slug}(weekly · 0.7)。

打开 ↗
XML

/sitemap-pages.xml

静态页 — 默认镜像主站双语首页/关于/支持/工具/法务页。

打开 ↗
TXT

/robots.txt

API 主机爬虫策略:全站 Disallow + 指向主站 sitemap(防重复收录)。

打开 ↗
JSON

/api/sitemap.json

sitemap 结构与 URL 总数(程序化消费 / 监控 / 构建)。

打开 ↗
🧭 URL 模式全可配:ARTICLE_URL_PATTERN(默认 /{category}/{slug},占位符 {slug} {category})· COURSE_URL_PATTERN(默认 /academy/{slug})· SITEMAP_BILINGUAL=1 时动态内容追加 /en 双语 URL · SITEMAP_STATIC_PAGES 覆盖静态清单(格式 path:priority:changefreq,…)。

主站集成指南(axionserve.com)

推荐 BFF 模式:主站 Worker 服务端调用本 API 渲染 HTML(SEO 最优、后端隐藏)。浏览器直连亦可 —— axionserve.com / portal.axionserve.com / localhost:5173 已在 CORS 白名单(含 credentials,可用 ALLOWED_ORIGINS 扩展)。

A · 代理 sitemap 到主站(即插即用,同域生效)

// axionserve-site Worker:原样代理门户 sitemap(同域生效)
const PORTAL = "https://axionserve-portal.aeronest-global.workers.dev";
const SEO_PATHS = ["/sitemap.xml", "/sitemap-pages.xml",
                   "/sitemap-articles.xml", "/sitemap-courses.xml"];

if (SEO_PATHS.includes(url.pathname)) {
  const r = await fetch(PORTAL + url.pathname);
  return new Response(await r.text(), {
    headers: { "content-type": "application/xml; charset=utf-8",
               "cache-control": "public, max-age=3600" }
  });
}

B · 调用内容渲染页面(列表 / 详情 / 学院)

// 服务端取内容(BFF);浏览器直连同样可用(CORS 白名单)
const PORTAL = "https://axionserve-portal.aeronest-global.workers.dev";

// 列表页 /articles(或按分类 /security、/products …)
const list = await (await fetch(
  PORTAL + "/api/articles?category=articles&page=1&limit=12"
)).json();
// → { items:[{slug,title,summary,cover_image,tags,author,
//     view_count,featured,published_at,category_slug,…}],
//     total, page, limit, total_pages }

// 详情页 /{category}/{slug} —— 渲染 article.content(发布后自动进 sitemap)
const article = await (await fetch(PORTAL + "/api/articles/" + slug)).json();

// 学院:课程列表 / 详情(含 lessons 摘要) / 章节全文
const courses = await (await fetch(PORTAL + "/api/courses")).json();
const course  = await (await fetch(PORTAL + "/api/courses/" + slug)).json();
const lesson  = await (await fetch(PORTAL + "/api/courses/" + slug + "/lessons/" + id)).json();
📌 主站现有 /robots.txt 已声明 Sitemap: https://axionserve.com/sitemap.xml —— 完成代理 A 后无需再改 robots。产品页(/products/*)由主站自有数据生成,建议保留在主站侧合并;发布/更新文章后本层缓存 ≤20s 自动刷新,sitemap ≤1h(管理写入会主动清理)。

快速调用

所有公开端点无需鉴权,返回 UTF-8 JSON。管理端点接受三种凭据:axs_* 控制台会话(POST /api/admin/login 密码换取)、axn_* 作用域 API 密钥(Agent 用)、ADMIN_TOKEN 主密钥。站点首页 / 为后台控制台(密码登录);/sitemap.html 为内容输出页。

curl "https://AXION_HOST/api/articles?page=1&limit=12"
# → {"items":[…],"total":42,"page":1,"limit":12,"total_pages":4}

# 管理写入
curl -X POST "https://AXION_HOST/api/admin/articles" \
  -H "Authorization: Bearer $ADMIN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title":"Hello Edge","content":"...","category":"articles"}'

端点参考

点击任意端点展开参数说明与实时调试台。GET 请求可直接在浏览器内试跑。

错误契约

全部错误统一为 JSON 信封,携带机器可读 code 与可追踪 requestId。

{
  "error":     "文章不存在",        // 人类可读(zh-CN)
  "code":      40401,               // 机器可读:HTTP状态×100+序号
  "requestId": "6f9d0…"             // 报障时提供此 ID 可精确定位日志
}
HTTPcode含义
40040001–40027参数校验失败(字段级提示)
40140100未携带 Bearer Token
40340300–40304密钥无效 / 权限范围不足(40301) / 爬虫拦截(40302) / 密码错误(40303) / 会话过期(40304)
40440400–40406资源不存在
40540500方法不允许(含 Allow 头)
40940900–40905唯一约束冲突(slug/symbol/令牌重复)
413 / 41541300 / 41500请求体超 2MB / Content-Type 非 JSON
42942900–42902触发限速(含 Retry-After 头)
500 / 50350000+ / 50301内部错误 / 存储绑定缺失

限速与缓存

⚡️

边缘缓存

公开 GET 命中 Cache API:文章列表 20s、行情 15s、文章/课程详情与分类 60s(均带 SWR 兜底);文档页 300s。X-Axion-Cache: HIT/STALE/MISS/BYPASS 可视化命中状态,ETag 支持 304,管理写入后自动清理本节点缓存。

🛡️

限速

每 IP 滑窗:公开 300 req/min,管理 60 req/min,写入 60 req/min,认证失败 15 req/min。触发返回 429 + Retry-After。可用环境变量 RATE_LIMIT_* 覆盖。

🩺

自愈 Schema

D1 查询失败自动触发幂等迁移(建表/补列)并重试一次。也可显式调用 POST /api/admin/migrate。

🔭

可观测

每个响应携带 X-Request-Id 与 X-Axion-Latency-Ms;5xx 输出结构化 JSON 日志,客户端永不泄漏堆栈。

架构特性

🌏

全球边缘

单文件 Worker 部署于 300+ 城市节点,就近响应,无冷启动惩罚。

🔐

纵深防御

恒定时间令牌比较、参数化 SQL、LIKE 通配符转义、CORS 域名白名单(axionserve.com 等 + ALLOWED_ORIGINS 可扩展)、CSP、全套安全响应头。

🧩

零依赖

不依赖任何 npm 包与构建工具,可粘贴至 Dashboard 直接部署。

🍎

契约稳定

v1 全部端点的路径、参数与响应形态逐字保留(含信封结构、404 文案、401/403 语义);新增字段仅做增量。

🔑 调试管理端点:在任意管理端点的调试台输入 Bearer Token(仅存于当前浏览器标签页 sessionStorage,刷新即失效,绝不上传第三方)。