Apidoc / PHP · Go · Rust

一套 API 文档体系,
三种开发语言。

在处理器旁声明文档,自动得到可浏览、可调试、可导出的 API 门户。PHP、Go、Rust 共用同一套文档模型与静态 UI。

3后端语言
16框架适配器
1共享文档 UI
12宠物表情

一个项目家族,一套文档体验。

Apidoc 把接口文档从手写 Markdown 变成代码旁的声明。PHP 版使用 PHP 8 attributes,Go 版使用类型化结构体,Rust 版使用过程宏;三者共享同一套文档模型、在线调试与静态前端。

PHP 版源自 HGthecode/apidoc-php(hg/apidoc);Go、Rust 与 apidoc-ui 由 erikwang2013 维护。每种语言保留自己的安装与接入方式,文档体验保持一致。

从声明到交付,三种语言走同一条文档流水线。

PHP >= 8.0Go >= 1.24Rust >= 1.82MIT
Apidoc 项目 Social Preview,宠物与注解代码
项目家族 Social Preview。宠物与注解代码。

先选语言,再看文档。

同一套文档工作流,不同的注解机制、框架适配与构建时机。每种语言都有独立的使用指南。

PHPv1.0.6

PHP

PHP 8 attributes 驱动的 API 文档

在 Laravel、ThinkPHP、Hyperf、Webman、Yii2、Yii3 中写 PHP 8 attributes,自动生成可浏览、可调试、可导出的接口文档。

  • PHP 8 attributes
  • 6 个框架适配
  • definitions / ref / children
  • 在线调试、Mock、JSON/TS
composer require erikwang2013/apidoc-php
Gov1.0.7

Go

类型化结构体随路由注册

接口文档以类型化结构体随路由注册,内嵌 Web UI 提供浏览与在线调试;兼容 net/http、Gin、Echo、Chi、Fiber、beego、Kratos、go-zero。

  • 类型化 Doc 结构体
  • 8 个框架适配
  • reflect + go/ast 解析
  • ETag、JSON/TS 导出
go get github.com/erikwang2013/apidoc-go
Rustv2.0.0

Rust

过程宏在编译期生成文档

用过程宏在 handler 上声明文档,编译期静态注册,运行期零成本聚合;兼容 axum 与 actix-web,内置鉴权、Mock、导出、分享与代码生成。

  • 20+ 属性宏
  • axum / actix-web
  • linkme 编译期注册
  • HMAC 鉴权、三种导出
apidoc-rust = "2.0"
UIVue 3.5

apidoc-ui 使用指南

Vue 3 + TypeScript 的文档加载与展示页面,支持应用/版本、在线调试、接口分享、Swagger 导出、缓存管理与多语言。构建产物为纯静态文件。

三套后端共用的静态文档前端 · Vue 3.5 · Vite 6 · Pinia · Monaco

npm ci && npm run build

同一个接口,三种写法。

不需要迁移技术栈。用你现有的语言声明路由与文档,Apidoc 负责生成、调试与交付。

User.php
use erikwang2013\apidoc\annotation as Apidoc;

#[Apidoc\Title("Get user")]
#[Apidoc\Method("GET")]
#[Apidoc\Url("/users/{id}")]
#[Apidoc\RouteParam(
    name: "id", type: "int"
)]
#[Apidoc\Returned(
    name: "name", type: "string"
)]
public function show(int $id) { }
main.go
s.Register(apidoc.Route{
    Method: "GET",
    URL:    "/users/:id",
    Handler: getUser,
    Doc: apidoc.Doc{
        Title: "Get user",
        Params: []apidoc.Param{
            {Name: "id", In: "path",
             Type: "int", Required: true},
        },
        Responses: []apidoc.Response{
            {Name: "name", Type: "string"},
        },
    },
})
user.rs
#[apidoc::title("Get user")]
#[apidoc::method("GET")]
#[apidoc::url("/users/{id}")]
#[apidoc::route_param(
    name = "id", ty = "int", required
)]
#[apidoc::returned(
    name = "name", ty = "string"
)]
async fn get_user() {}

同一套文档体验,各自原生。

从在线调试到鉴权、导出与共享 UI,核心工作流一致;具体能力以各语言指南为准。

在线调试

在文档页直接请求真实接口,支持全局参数、Mock 预填与请求前后事件。三种语言的文档都提供调试面板。

200 OK示例响应
{ "code": 0, "data": { "id": 1024 } }

Mock 数据

字段级 Mock 示例。PHP 支持规则表达式,Go 按类型生成,Rust 提供 15 条 fake 规则。

nickname"erik"
email"fake:email"
id1024

多应用 / 多版本

一套文档管理多个应用与版本,按应用树切换;接口归属与访问密码可以独立配置。

api v1admin v2open v3

鉴权与缓存

全局密码与应用独立密码;文档缓存、ETag/304 与常量时间比较,兼顾速度与安全。

password******

统一导出

JSON、TypeScript、Markdown、Swagger/OpenAPI 等格式按语言提供;请求与响应可直接交给前端和测试。

JSONTypeScriptMarkdownSwagger

代码生成

PHP 与 Rust 提供配置/模板驱动的代码生成;Go 侧重文档导出与注释解析。

API fileHandlerSQL

共享文档 UI

apidoc-ui 同时服务 PHP、Go、Rust 后端;Vue 3 + TypeScript,构建产物为纯静态文件。

apidoc-ui · Vue 3

安全边界

HMAC 令牌、CORS 白名单、路径与标识符校验;把文档服务当作生产接口来保护。

HMAC-SHA256CORS

从声明到交付

声明、浏览、调试、导出、部署沿同一条路径完成,三种语言共享这套工作流。

声明浏览调试导出部署
声明

在代码旁写注解

浏览

文档自动生成

调试

在线请求与 Mock

导出

JSON / TS / Swagger

使用文档是本站的主体。

每种语言都包含安装、规则、完整示例、典型场景与排错。先选你的技术栈,再按章节深入。

PHPv1.0.6

PHP 使用指南

在 Laravel、ThinkPHP、Hyperf、Webman、Yii2、Yii3 中写 PHP 8 attributes,自动生成可浏览、可调试、可导出的接口文档。

  • 安装与框架接入
  • 注解、参数与响应规则
  • definitions / ref / children 复用
  • 鉴权、导出、场景与排错
阅读使用指南
Gov1.0.7

Go 使用指南

接口文档以类型化结构体随路由注册,内嵌 Web UI 提供浏览与在线调试;兼容 net/http、Gin、Echo、Chi、Fiber、beego、Kratos、go-zero。

  • 安装、Config 与 Router
  • Route / Doc / Param / Response
  • 8 个框架适配器
  • 鉴权、缓存、导出、场景与排错
阅读使用指南
Rustv2.0.0

Rust 使用指南

用过程宏在 handler 上声明文档,编译期静态注册,运行期零成本聚合;兼容 axum 与 actix-web,内置鉴权、Mock、导出、分享与代码生成。

  • 依赖、宏与编译期规则
  • axum / actix-web 接入
  • 鉴权、Mock、多应用版本
  • 导出、代码生成、场景与排错
阅读使用指南
UIVue 3.5

apidoc-ui 使用指南

Vue 3 + TypeScript 的文档加载与展示页面,支持应用/版本、在线调试、接口分享、Swagger 导出、缓存管理与多语言。构建产物为纯静态文件。

  • 构建与部署
  • config.js 运行时配置
  • 多 Host / appKey / 鉴权
  • 调试事件、Mock 扩展与排错
阅读使用指南

16 个框架适配器,覆盖主流服务端。

PHP 6 个、Go 8 个、Rust 2 个;同一套文档模型,不同的薄适配层。

PHP

6
LaravelThinkPHPHyperfWebmanYii2Yii3

Go

8
net/httpGinEchoChiFiberbeegoKratosgo-zero

Rust

2
axumactix-web

选一种语言,直接开始。

下面是各语言的最小安装命令;框架接入、配置与完整示例在对应指南中。

每种指南都从最小可运行示例开始,再展开注解规则、场景与排错。

当前版本

版本日志与完整变更以各仓库 Releases 为准。

PHPv1.0.6

安全与稳定性修复

  • 模板/生成器去 eval、标识符白名单与路径校验
  • 分享列表、多级应用树与多注解 TypeError 修复
  • 缓存原子写、Auth 常量时间比较、冒烟测试
查看 Releases
Gov1.0.7

适配器文档与 UI 资源

  • 补齐 beego、Kratos、go-zero 适配器文档
  • 内置 UI favicon 与侧栏宠物图标
  • HTTP 缓存、reflect 参数与 UI 树能力
查看 Releases
Rustv2.0.0

Rust 原生鉴权

  • 鉴权改为 Rust 原生 POST + HMAC-SHA256
  • 移除 PHP 时代实现,全库统一
  • 保留 v2 五项能力:table、缓存、分享、代码生成、调试事件
查看 Releases

项目宠物,十二种情绪。

它是一页会走路的文档。每个表情都是独立 SVG,自带动效,并遵循 prefers-reduced-motion。

Apidoc pet: Smile
笑:emoji-smile:
Apidoc pet: Joy
欢乐:emoji-joy:
Apidoc pet: Cry
哭:emoji-cry:
Apidoc pet: Depressed
沮丧:emoji-depressed:
Apidoc pet: Terrified
惊恐:emoji-terrified:
Apidoc pet: Angry
愤怒:emoji-angry:
Apidoc pet: Coquettish
撒娇:emoji-coquettish:
Apidoc pet: Cute
卖萌:emoji-cute:
Apidoc pet: Pleasing
讨好:emoji-pleasing:
Apidoc pet: Knocking
敲打:emoji-knocking:
Apidoc pet: Facepalm
捂脸:emoji-facepalm:
Apidoc pet: Tongue
吐舌头:emoji-tongue:

项目宠物与表情属于项目视觉资产,版权归作者所有,商业使用需取得授权。详见 ASSETS-LICENSE.md。 ASSETS-LICENSE.md.

把 Apidoc 带到
你的技术栈。

从 Packagist、Go modules、crates.io 或 GitHub 获取;三套后端共用同一个文档 UI。