OpenAPI模块已重构为使用Handler机制来处理具体的业务逻辑,移除了Routes目录,改用注解方式注册路由。这种架构提供了更好的代码组织、可测试性和可维护性。
Routes/
├── api.php # 路由文件,包含匿名函数处理逻辑
└── admin.php # 后台路由文件
Controllers/
├── AuthController.php
├── AppController.php
└── WebhookController.php
Handlers/ # 新增:业务处理器
├── BaseHandler.php # Handler基类
├── User/
│ ├── UserInfoHandler.php
│ └── UserListHandler.php
├── Game/
│ └── GameStatsHandler.php
└── Fund/
└── FundBalanceHandler.php
Controllers/
├── ApiController.php # 新增:通用API控制器
├── AuthController.php # 保留:认证控制器
├── AppController.php # 保留:应用管理控制器
└── WebhookController.php # 保留:Webhook控制器
Services/
├── RouteRegistrationService.php # 新增:路由注册服务
└── HandlerRegistrationService.php # 新增:Handler注册服务
Contracts/
└── HandlerInterface.php # 新增:Handler接口
所有Handler必须实现HandlerInterface接口:
interface HandlerInterface
{
public function handle(array $data, array $context = []): JsonResponse;
public function validatePermissions(array $scopes, array $context = []): bool;
public function getRequiredScopes(): array;
}
提供Handler的基础功能:
abstract class BaseHandler implements HandlerInterface
{
// 权限验证
public function validatePermissions(array $scopes, array $context = []): bool;
// 响应方法
protected function successResponse(string $message, $data = null, int $code = 200);
protected function errorResponse(string $message, $errors = null, int $code = 400);
// 数据验证
protected function validateData(array $data, array $rules): ?array;
// 上下文获取
protected function getUserId(array $context): int;
protected function getApp(array $context): ?OpenApiApp;
// 日志记录
protected function logAction(string $action, array $data, array $context): void;
}
class UserInfoHandler extends BaseHandler
{
public function getRequiredScopes(): array
{
return ['USER_READ'];
}
public function handle(array $data, array $context = []): JsonResponse
{
// 验证权限
if (!$this->validatePermissions($app->scopes ?? [], $context)) {
return $this->errorResponse('权限不足', null, 403);
}
// 获取用户信息
$userInfo = $this->getUserInfo($userId);
// 记录日志
$this->logAction('user.info.get', ['user_id' => $userId], $context);
return $this->successResponse('获取用户信息成功', $userInfo);
}
}
使用RouteRegistrationService来注册路由:
class RouteRegistrationService
{
public function registerApiRoutes(): void
{
Route::get('/user/info', [ApiController::class, 'getUserInfo'])
->name('openapi.user.info');
}
}
在控制器中使用注解定义路由属性:
#[Prefix('api/openapi')]
#[Middleware(['api', 'openapi'])]
class ApiController extends Controller
{
#[Middleware('openapi.scope:USER_READ')]
public function getUserInfo(Request $request, UserInfoHandler $handler): JsonResponse
{
return $this->handleRequest($request, $handler);
}
}
GET /api/openapi/user/infoUSER_READuser_id(可选,默认使用上下文中的用户ID)GET /api/openapi/user/listUSER_READpage, per_page, search, statusGET /api/openapi/game/statsGAME_READdate_from, date_to, user_id, game_typeGET /api/openapi/fund/balanceFUND_READuser_id, currency_types, include_frozen<?php
namespace App\Module\OpenAPI\Handlers\YourModule;
use App\Module\OpenAPI\Handlers\BaseHandler;
use Illuminate\Http\JsonResponse;
class YourHandler extends BaseHandler
{
public function getRequiredScopes(): array
{
return ['YOUR_SCOPE'];
}
public function handle(array $data, array $context = []): JsonResponse
{
// 实现你的业务逻辑
return $this->successResponse('操作成功', $result);
}
}
在HandlerRegistrationService中注册:
protected function registerYourHandlers(ServiceProvider $provider): void
{
$provider->app->singleton(YourHandler::class, function ($app) {
return new YourHandler(
$app->make(ScopeService::class)
);
});
}
在RouteRegistrationService中添加路由:
Route::get('/your/endpoint', [ApiController::class, 'yourMethod'])
->name('openapi.your.endpoint');
在ApiController中添加方法:
#[Middleware('openapi.scope:YOUR_SCOPE')]
public function yourMethod(Request $request, YourHandler $handler): JsonResponse
{
return $this->handleRequest($request, $handler);
}
目前Handler返回的是示例数据,需要与实际业务模块集成:
// 当前示例代码
protected function getUserInfo(int $userId): ?array
{
// TODO: 这里应该调用User模块的服务
// 例如: return app(UserService::class)->getUserById($userId);
// 暂时返回示例数据
return ['id' => $userId, 'name' => "用户{$userId}"];
}
Handler机制为OpenAPI模块提供了强大的扩展能力和良好的代码组织结构,为后续的功能扩展奠定了坚实的基础。