Skip to content

Releases: erikwang2013/apidoc-rust

v2.0.0

Choose a tag to compare

@github-actions github-actions released this 12 Oct 04:40

⚠️ 破坏性变更(从 1.x 升级必读)

  • 登录端点改了:GET /apidoc/auth?password=… → POST /apidoc/auth(JSON body {"password": "...", "appKey": "..."},appKey 用于应用独立密码)。密码不再出现在 URL、访问日志与浏览器历史中。
  • 令牌格式改了:改为 base64url(payload).base64url(HMAC-SHA256(payload)),签名密钥 = HMAC(secret_key, 凭据)——改密码即刻作废旧令牌,1.x 的旧令牌全部失效。
  • secret_key 缺省值改了:不再有公开默认值,缺省时取进程内随机密钥(进程重启会作废已签发令牌)。多实例部署请显式配置 secret_key。

主要变化

鉴权(Rust 原生实现)

  • POST 登录 + 服务端恒定时间比对;空密码(全局/应用)两侧一律失败关闭
  • 登录失败退避:按凭据分桶,前 3 次不罚,之后 1s→…封顶 10s,静默 2 分钟清零
  • 带凭据/token 的响应统一 Cache-Control: no-store
  • 依赖:移除 md5,新增 hmac / sha2 / base64 / getrandom

修复

  • /apidoc/share 以 appKey 传参时可越权换出全局 token
  • 宏 id 撞车:同模块重名函数(impl 方法、嵌套 fn)会静默合并成一个端点
  • 应用分享链接打不开:首次请求前未先把 ?app= 落成当前应用
  • swagger:path 参数改以 URL 模板为准;success 状态码校验、重复码告警
  • 生成物转义:codegen 内置模板(新增 url_js / method_js / fn_name 与 SQL 字面量)、TypeScript 导出、markdown 表格与代码围栏
  • mock 缓存按实例隔离;ui.js 侧边栏高亮错组、emoji 密码无法登录、分享 token 落盘后从地址栏抹除
  • leak() 改进程内驻留;/apidoc/generate 改构建期预渲染;响应体改 Bytes 零拷贝

工程

  • 声明 rust-version = "1.82"
  • 13 份 README 全量同步(含 2.0 升级提示),39 张图更新,补 LICENSE(MIT)

Full Changelog: v1.6.2...v2.0.0

v1.6.2

Choose a tag to compare

@github-actions github-actions released this 08 Oct 16:03

文档修复:README 内 6 处图片与 12 个语言切换链接改为绝对 URL。

crates.io 渲染 README 时会把相对路径拼接在 crate 目录(crates/apidoc/)之后,导致图片与翻译页链接全部 404;改为 GitHub 绝对链接后,crates.io 与 GitHub 两端渲染均正常。无代码改动。

v1.6.1

Choose a tag to compare

@github-actions github-actions released this 08 Oct 15:56

重构与去重批次(净约 -450 行),无新功能。

优化

  • axum/actix 适配器收敛出框架无关 route_core(296+314 → 92+85+217 行),公共 API 不变,双层 clone 仪式清零
  • 8 个适配器集成测试共享 tests/common/ 断言体(driver 1825→603 行),测试数与断言零缩水
  • 版本号单一来源:删除包内 VERSION,swagger info.version 改取 env!("CARGO_PKG_VERSION")(今后发版只需同步根 VERSION ↔ Cargo.toml)
  • 两个包补齐 readme = "../../README.md":crates.io 页面从此有 README(此前一直空白)
  • .gitignore 清 52 行模板误并入块;export/markdown.rs 的 fn cell 提层

行为变化(唯一,已加断言钉住)

  • axum 守卫失败 401 的 Content-Type 由 text/plain; charset=utf-8 收敛为 application/json(与 actix 一致;响应体本就是 JSON)

验证

  • 5 配置测试矩阵 0 failed(82/92/120/119/147,逐 binary 与干净基线一致)
  • api.json 输出三份 sha256 完全一致(cargo test 覆盖 + 字节比对);clippy 零新增 warning
  • cargo package 内容核对:README.md ✓ / route_core.rs ✓ / 无 VERSION ✓

v1.6.0

Choose a tag to compare

@erikwang2013 erikwang2013 released this 07 Oct 13:33

版本 1.6.0 · v2 五项能力

新增

  • 数据表字段引用:#[apidoc::table("user")] + ApidocConfig.tables,表字段平铺并入 returned(与 ref 互不覆盖,每端点只打一次)
  • 文档缓存:CacheConfig { enable, ttl },/apidoc/mock 按 (url, method) 记忆化,ttl = 0 永久
  • 分享链接:GET /apidoc/share?app=&url=&method=&base= → 深链 JSON;文档页分享按钮(剪贴板,失败降级输入框)、?app=&ep=&method=&token= 深链;鉴权开启时链接自带 token,打开免密
  • 代码生成器:GET /apidoc/generate?template= + 内置 api.ts / handler.rs / schema.sql;模板语法 {{变量}} 与可嵌套 {{#each}}(深度上限 32、展开预算 10 万,超限整块原样保留);ApidocConfig.codegen 同名覆盖内置
  • 调试事件:在线调试面板前置/后置脚本(new Function('ctx', code),localStorage 持久化),前置可改 ctx、后置可替换展示文本,报错不中断请求

安全

  • 修复分享路由鉴权绕过:守卫改按被分享的应用校验 —— 修复前「无凭据即可铸造应用 token」,全局 token 亦可提权到任意独立密码应用(独立复核发现,双适配器实测复现)

兼容

  • v2 配置字段全部 serde(skip):未使用时 api.json 与 v1 字节级一致
  • 测试 147 通过 / 0 失败

已知边界

  • 表字段为平铺标量列(无 children);ref + table 同体的目标不再二次传播
  • codegen 不转义用户数据(输入为编译期注解与项目配置,输出 text/plain)
  • share 的 base 参数可指向任意 host(该接口本就返回 token)
  • 空应用密码:/apidoc/auth 会签发、share 拒签(失败关闭),差异已注释

v1.5.0

Choose a tag to compare

@github-actions github-actions released this 07 Oct 09:38

版本 1.5.0

文档 UI 宠物整合

  • crates/apidoc/src/pet.svg 随包发布,适配器挂载 GET /apidoc/pet.svg(axum / actix-web 各一条路由,不设鉴权守卫,与 UI 页同级)
  • 文档页三处用上宠物:favicon、页头 logo、密码遮罩 logo

文档全量同步(12 语言)

  • README 恢复 apidoc-php 版式:宠物图 + 项目简介 + 「✨项目说明」10 条
  • 新增 Social Preview 图(1280×640)
  • 12 个译文 README 同步:宠物图、tagline、项目介绍、项目说明、Roadmap v2、版本号(含 📖 标题对齐)

版本

  • VERSION 1.4.0 → 1.5.0;发布包版本由 0.1.0 统一到 1.5.0(与项目版本同号)
  • crates.io:apidoc-macros 1.5.0 + apidoc-rust 1.5.0(修复 0.1.0 依赖 apidoc-macros 被 yank 后新装用户解析失败的问题)

v1.4.0

Choose a tag to compare

@github-actions github-actions released this 28 Aug 18:50

Full Changelog: v1.3.0...v1.4.0

v1.3.0

Choose a tag to compare

@github-actions github-actions released this 28 Aug 17:13

Full Changelog: v1.2.0...v1.3.0

v1.2.0

Choose a tag to compare

@github-actions github-actions released this 28 Aug 16:04

Full Changelog: v1.1.0...v1.2.0

v1.1.0

Choose a tag to compare

@github-actions github-actions released this 28 Aug 14:38

Full Changelog: v1.0.0...v1.1.0

v1.0.0

Choose a tag to compare

@erikwang2013 erikwang2013 released this 28 Aug 13:36
初始提交:M1 核心 + M2 axum 适配器 + 完整文档

- M1: 7 个属性宏(title/desc/method/url/param/query/returned)+ linkme 静态注册 + DocRegistry 聚合 + api.json 输出,13 测试
- M2: apidoc-axum 薄适配器(/apidoc UI + /apidoc/api.json + CORS)+ include_str! 内嵌极简 UI + 分组目录,18 测试
- README(中文)+ 架构/功能/生命周期 SVG(水印 https://erik.xyz)+ 12 语言 i18n 文档