这里有个基于 flightphp 框架的实现 —— php-mock-flight-server ,搭配它可以展示完整交互页面。
- 路由:POST
/admin-api/ms-user/auth/login - 报文:
{
"email": "admin@example.com",
"password": "admin123"
}HTTP 状态码 200 ,正常响应示例:
{
"code": 200,
"message": "ok",
"data": {
"access_token": "f55e9f5d-3b6e-4552-a558-b3564ad94359",
"user_id": 1,
"name": "Admin",
"email": "a***n@example.com",
"role": "administrator",
"avatar": "https://avatars.githubusercontent.com/u/3280204?v=4&size=80"
}
}(如 email 或者 password 错误等场景)异常响应示例:
{
"code": 422,
"message": "incorrect email or password!",
"data": null
}后续文章,分类等接口需要携带 access_token 到 headers 中,也就是
Authorization: Bearer f55e9f5d-3b6e-4552-a558-b3564ad94359
| 路由 | URI | 备注 |
|---|---|---|
| 文章列表 | GET /admin-api/ms-content/article? |
|
| 获取特定 id 文章 | GET /admin-api/ms-content/article/{id} |
# 其中 {id} 为数字,后同 |
| 创建文章 | POST /admin-api/ms-content/article |
|
| 更新特定 id 文章 | POST/PUT /admin-api/ms-content/article/{id} |
|
| 删除特定 id 文章 | DELETE /admin-api/ms-content/article/{id} |
可接受的查询串:page=1&per_page=15&keyword={keyword}&category_id={category}&status={status}
- page int 当前第几页
- per_page int 每页分页大小
- keyword string 关键词搜索
- category_id int 分类 id
- status string 状态,取后面枚举值其一
('draft' | 'published' | 'archived')
{
"code":200,
"message": "ok",
"data": {
"items": [
{
"id": 18,
"title": "stunt",
"content": "Fugit caecus conscendo vivo debeo. Amoveo desparatus summa caelestis somnus amiculum tactus derelinquo abundans. Ater desparatus ait valetudo ver pecus viscus.F",
"excerpt": "Volo averto annus barba vulnero cohibeo caveo solutio.",
"category_id": 1,
"category": {
"id": 1,
"name": "default"
},
"status": "draft",
"created_at": "2024-06-28 20:21:13",
"updated_at": "2025-08-03 09:27:02",
"published_at": null
},
{
"id": 13,
"title": "how",
"content": "Cursim ademptio curso videlicet crur aureus tres vix id stella. Aufero creator arbitro unus avarus decor. Vigor provident suasoria assentator amitto.",
"excerpt": "Casso canis summisse tracto celer.",
"category_id": 1,
"category": {
"id": 1,
"name": "default"
},
"status": "draft",
"created_at": "2024-02-13 13:01:32",
"updated_at": "2024-06-28 20:21:13",
"published_at": "2024-07-03 09:36:22"
}
],
"total": 20,
"per_page": 15,
"current_page": 1
}
}请求报文:
{
"title": "adjourn",
"content": "Arbor vinitor bibo. Benevolentia contabesco minus delibero uberrime umquam vitae. Alias decretum nulla capio curto certe cresco cuius patior celebrer.",
"excerpt": "Temeritas vinco sumo enim.",
"category_id": 1
}HTTP 状态码 201 ,正常返回响应:
{
"code":200,
"message": "ok",
"data": {
"id": 13,
"title": "adjourn",
"content": "Arbor vinitor bibo. Benevolentia contabesco minus delibero uberrime umquam vitae. Alias decretum nulla capio curto certe cresco cuius patior celebrer.",
"excerpt": "Temeritas vinco sumo enim.",
"category_id": 1,
"category": {
"id": 1,
"name": "default"
},
"status": "draft",
"created_at": "2024-02-13 13:01:32",
"updated_at": "2025-01-23 12:16:28"
}
}类似于创建文章,只不过端点不同 POST /admin-api/ms-content/article/13
响应示例:
{
"code":200,
"message": "ok",
"data": {
"id": 13,
"title": "adjourn2",
"content": "Arbor vinitor bibo. Benevolentia contabesco minus delibero uberrime umquam vitae. Alias decretum nulla capio curto certe cresco cuius patior celebrer.",
"excerpt": "Temeritas vinco sumo enim.",
"category_id": 1,
"category": {
"id": 1,
"name": "default"
},
"status": "published",
"created_at": "2024-02-13 13:01:32",
"updated_at": "2025-01-23 12:16:28"
}
}略去不表。
| 路由 | URI | 备注 |
|---|---|---|
| 获取所有分类 | GET /admin-api/ms-content/category/all |
分类数量有限,故获取全部 |
| 获取特定 id 分类 | GET /admin-api/ms-content/category/{id} |
# 其中 {id} 为数字,后同 |
| 创建分类 | POST /admin-api/ms-content/category |
|
| 更新特定 id 分类 | POST/PUT /admin-api/ms-content/category/{id} |
|
| 删除特定 id 分类 | DELETE /admin-api/ms-content/category/{id} |
分类的实体结构如下:
{
"id": 1,
"name": "default",
"description": "Default category",
"slug": "default",
"created_at": "2023-08-21 12:31:45",
"updated_at": "2023-08-21 12:31:45",
"articles_count": 0
}由于分类数量有限,没有提供分类列表接口,只提供了所有分类接口,响应报文如下:
{
"code": 200,
"message": "ok",
"data": [
{
"id": 1,
"name": "default",
"description": "Default category",
"slug": "default",
"created_at": "2023-08-21 12:31:45",
"updated_at": "2023-08-21 12:31:45",
"articles_count": 11
},
{
"id": 2,
"name": "life",
"description": "Some memory in life",
"slug": "life",
"created_at": "2024-09-01 09:25:13",
"updated_at": "2024-09-16 13:23:17",
"articles_count": 3
},
{
"id": 3,
"name": "work",
"description": "Something related to work",
"slug": "work",
"created_at": "2025-12-24 17:30:09",
"updated_at": "2025-12-24 17:30:09",
"articles_count": 43
}
]
}其他接口与文章说明类似,不再赘述。
| 路由 | URI | 备注 |
|---|---|---|
| 当前登录用户 | GET /admin-api/ms-user/me |
|
| 用户列表 | GET /admin-api/ms-user/user |
|
| 获取特定 id 用户 | GET /admin-api/ms-user/user/{id} |
# 其中 {id} 为数字,后同 |
| 创建用户 | POST /admin-api/ms-user/user |
|
| 更新特定 id 用户 | POST/PUT /admin-api/ms-user/user/{id} |
|
| 删除特定 id 用户 | DELETE /admin-api/ms-user/user/{id} |
GET /admin-api/ms-user/me
响应示例:
{
"code": 200,
"message": "ok",
"data": {
"name": "Admin",
"email": "a***n@example.com",
"avatar": "https://avatars.githubusercontent.com/u/3280204?v=4&size=80",
"role": "administrator",
"user_id": 1
}
}GET /admin-api/ms-user/user
{
"code": 200,
"message": "ok",
"data": {
"total": 2,
"per_page": 10,
"current_page": 1,
"items": [
{
"id": 1,
"name": "Admin",
"email": "a***n@example.com",
"role": "administrator"
},
{
"id": 2,
"name": "Demo",
"email": "d**o@foxmail.com",
"role": "demo"
}
]
}
}其它增改删类似,不再赘述。