62 lines
1.9 KiB
Markdown
62 lines
1.9 KiB
Markdown
---
|
||||
|
|
name: backend-swagger
|
|||
|
|
description: Swagger/OpenAPI 注解规范,自动生成 API 文档
|
|||
|
|
globs:
|
|||
|
|
- "app/**/controller/**/*.php"
|
|||
|
|
- "app/schema/**/*.php"
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 注解规范
|
|||
|
|
|
|||
|
|
### 控制器注解
|
|||
|
|
|
|||
|
|
```php
|
|||
|
|
use OpenApi\Attributes as OA;
|
|||
|
|
|
|||
|
|
#[OA\Tag(name: '{module_name}管理')]
|
|||
|
|
class {Model}Controller extends Crud
|
|||
|
|
{
|
|||
|
|
#[OA\Get(path: '/{module_route}', summary: '列表', tags: ['{module_name}管理'])]
|
|||
|
|
#[Permission(code: '{module}:{model}:list')]
|
|||
|
|
public function index(Request $request): \support\Response
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Schema 注解
|
|||
|
|
|
|||
|
|
```php
|
|||
|
|
#[OA\Schema(title: '创建请求')]
|
|||
|
|
class {Model}CreateRequest
|
|||
|
|
{
|
|||
|
|
#[OA\Property(property: 'name', description: '名称', type: 'string')]
|
|||
|
|
public string $name;
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 扫描路径
|
|||
|
|
|
|||
|
|
| 模块 | 路径 |
|
|||
|
|
|------|------|
|
|||
|
|
| AdminAPI 路由分组 | `/adminapi` |
|
|||
|
|
| AdminAPI 注解 path | `/{module_route}`,不要重复写 `/adminapi` |
|
|||
|
|
| API 路由分组 | `/api` |
|
|||
|
|
| API 注解 path | `/{module_route}`,不要重复写 `/api` |
|
|||
|
|
|
|||
|
|
## 文档生成机制
|
|||
|
|
|
|||
|
|
- AdminAPI 动态文档地址:`/adminapi/openapi.json`
|
|||
|
|
- AdminAPI Swagger UI:`/adminapi/openapi`
|
|||
|
|
- API 动态文档地址:`/api/openapi.json`
|
|||
|
|
- API Swagger UI:`/api/openapi`
|
|||
|
|
- 当前项目通过 `app/adminapi/config/route.php` 和 `app/api/config/route.php` 中的 `OpenApiController::document()` 请求时动态扫描生成文档。
|
|||
|
|
- 当前项目尚未内置自动导出 `openapi.json` 到文件系统或 CI 的步骤。
|
|||
|
|
- 路由注册也复用相同扫描源:`RouteRegister::create()->register((new Reader())->getData($config->getScanSources()))`。
|
|||
|
|
|
|||
|
|
## 检查清单
|
|||
|
|
|
|||
|
|
- [ ] 控制器类是否有 `#[OA\Tag]`
|
|||
|
|
- [ ] 每个方法是否有 `#[OA\Get/Post/Put/Delete]`
|
|||
|
|
- [ ] Schema 属性是否有 `#[OA\Property]`
|
|||
|
|
- [ ] 路由已注册 Swagger 扫描路径
|
|||
|
|
- [ ] 后端已重启,确保新控制器被注解路由扫描到
|
|||
|
|
- [ ] 访问 `/adminapi/openapi.json` 或 `/api/openapi.json` 确认动态文档包含新路径
|