本文目录导读:

为 PHP 项目编写接口文档,核心目标是让前端、客户端或第三方开发者能快速、准确地对接,没有统一的强制标准,但遵循行业惯例能大大提升协作效率。
这里提供一套最实用、最规范的编写方案,结合了 Markdown 文档(轻量) 和 OpenAPI/Swagger(重量级) 两种模式,你可以根据项目规模选择。
轻量级——Markdown 文档(适合中小型项目、快速迭代)
这是最直接的方式,维护在 Git 仓库中(如 docs/api.md),随代码版本控制。
文档头部(全局说明)
首先定义全局的通用规则,避免每个接口重复书写。
# 项目名称 API 接口文档
**版本号:** v1.0
**更新日期:** 2023-10-01
**Base URL:** `https://api.example.com`
**协议格式:** HTTPS + JSON
---
## 全局约定
### 1. 请求头 (Headers)
所有请求需携带以下 Header:
| Header | 必填 | 说明 |
| :--- | :--- | :--- |
| `Content-Type` | 是 | `application/json` |
| `Authorization` | 是 | `Bearer {token}` (登录后获取,除登录接口外均必填) |
| `X-Request-Id` | 否 | 用于日志追踪的唯一 ID (UUID) |
### 2. 统一响应格式
所有接口返回 JSON 数据,结构统一如下:
```json
{
"code": 200,
"message": "success",
"data": {
// 实际业务数据
}
}
| 字段 | 类型 | 说明 |
|---|---|---|
code |
int | 业务状态码。200 为成功,40001 为参数错误,40002 为未登录,50000 为服务器内部错误 |
message |
string | 提示信息 |
data |
object/array/null | 返回数据负载 |
分页参数
列表接口通用分页参数(Query 参数):
page:页码,默认 1page_size:每页条数,默认 20,最大 100
接口详情模板(核心部分)
每一个接口按照下面的模板来写。
---
## 用户模块
### 1. 用户登录
**接口描述:** 通过用户名和密码获取 Token。
**请求方法:** `POST`
**请求路径:** `/api/v1/auth/login`
**请求参数 (Request Body - JSON):**
| 参数名 | 类型 | 必填 | 说明 |
| :--- | :--- | :--- | :--- |
| `username` | string | 是 | 用户名,长度 5-20 位 |
| `password` | string | 是 | 密码,需 MD5 加密后传输 |
**请求示例:**
```json
{
"username": "admin",
"password": "e10adc3949ba59abbe56e057f20f883e"
}
响应示例 (成功 - HTTP 200):
{
"code": 200,
"message": "登录成功",
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expires_in": 7200
}
}
响应示例 (失败 - HTTP 200,业务错误):
{
"code": 40002,
"message": "用户名或密码错误",
"data": null
}
业务异常情况:
| 业务 code | 说明 |
|---|---|
40002 |
用户名或密码错误 |
40003 |
账号已被禁用 |
**小技巧:** 若接口较多,建议给每个功能模块加一个二级标题(如 `## 用户模块`),并在文档开头添加目录(TOC)链接。
---
### 方案二:重型级—— OpenAPI (Swagger) 规范(适合大型项目、前后端分离、微服务)
这种方式**自动化程度高**,代码即文档,PHP 常用的工具有:
- **zircote/swagger-php**:通过注解(Attributes)自动生成 OpenAPI 文档。
- **L5-Swagger**:Laravel 框架首选的包。
#### 1. 安装与集成(以 Laravel + L5-Swagger 为例)
```bash
composer require darkaonline/l5-swagger
在 Controller 中添加注解
直接在 PHP 代码中写接口文档,保证文档与代码同步更新。
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class AuthController extends Controller
{
/**
* @OA\Post(
* path="/api/v1/auth/login",
* summary="用户登录",
* description="通过用户名和密码获取 Token",
* tags={"用户认证"},
* @OA\RequestBody(
* required=true,
* @OA\JsonContent(
* required={"username","password"},
* @OA\Property(property="username", type="string", example="admin", description="用户名"),
* @OA\Property(property="password", type="string", example="e10adc...", description="MD5密码")
* )
* ),
* @OA\Response(
* response=200,
* description="登录成功",
* @OA\JsonContent(
* @OA\Property(property="code", type="integer", example=200),
* @OA\Property(property="message", type="string", example="登录成功"),
* @OA\Property(property="data", type="object",
* @OA\Property(property="token", type="string", example="eyJhb..."),
* @OA\Property(property="expires_in", type="integer", example=7200)
* )
* )
* ),
* @OA\Response(response=401, description="用户名或密码错误")
* )
*/
public function login(Request $request)
{
// ... 业务逻辑
return response()->json([
'code' => 200,
'message' => '登录成功',
'data' => [/* ... */]
]);
}
}
访问文档
启动服务后,访问 /api/documentation,即可看到 Swagger UI 交互式文档,支持“Try it out”直接调试。
辅助工具类(实用派)
如果不想手动写太多字,可以使用以下工具生成:
- Postman:
- 在 Postman 中调试好接口后,生成“公用链接”或分享到工作空间,团队实时查看。
- 优点:方便调试;缺点:不随代码版本管理,容易文档与代码不同步。
- Apifox / Apipost:
- 国内协作利器,可以后置脚本自动同步数据库表结构,或者导入 Postman 数据,建议导出 Markdown 格式,放在 Git 仓库中作为备份。
高级建议(避坑指南)
- 必须定义“业务错误码”:不要只依赖 HTTP 状态码,因为 PHP 项目(如 Laravel)通常异常时会返回
200 OK,但data里包含业务错误,定义好code和message字典是必须的。 - 版本控制(Versioning):接口 URL 中一定要带
v1(如/api/v1/user),如果将来有破坏性变更(如修改字段名),建议新增v2接口,而不是直接修改v1。 - 字段命名规范:建议始终使用
snake_case(如user_name)或始终使用camelCase(如userName),PHP 通常偏好snake_case,但若前端是 JS,camelCase更受欢迎,二选一,并在文档中明确注明。 - 补充“时序图”:对于复杂的业务(如支付、OAuth2.0 授权),用一张时序图(Mermaid 支持 Markdown 中绘制)远比文字描述清楚。
sequenceDiagram
participant 前端
participant 后端
participant 数据库
前端->>后端: 提交登录信息
后端->>数据库: 查询用户
数据库-->>后端: 返回用户信息
后端-->>前端: 返回 Token
总结建议:
- 优先级:如果项目是 Laravel/Symfony,推荐使用 Swagger 注解,这是最专业的 PHP 做法。
- 如果赶时间:直接用 Markdown 写,但确保每个 Controller 的方法体前都有清晰的 注释,方便后续生成。
- 最核心的一点:代码改了,记得同步改文档! 没有这一点,写再多规范都没用。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播