基于最新版本的 Lumen 基础构建的一个基础功能完备,规范统一,能够快速应用于实际的 API 项目开发启动模板。同时,也希望通过合理的架构设计使其适用于中大型项目。
少许的依赖安装,遵循 Laravel 的思维进行扩展,不额外增加「负担」。
开箱即用,加速 Api 开发。
开始了解本项目前,引用一段官方说明
在发布Lumen后的几年里,PHP进行了各种出色的性能改进。因此,随着Laravel Octane的推出,我们不再建议您使用Lumen开始新项目。相反,我们建议始终使用Laravel开始新项目。
项目会继续更新维护,当中使用到 package 也会继续更新同时支持 laravel/lumen 新版本。API 规范没有严格意义上的标准,能适用于团队,让项目更好维护的规范就是好的规范,欢迎一起讨论。
项目laravel版本传送地址
├── app
│ ├── Console
│ │ ├── Commands // cli command:通常用于实现轮询任务
│ │ └── Kernel.php // Schedule 调度
│ ├── Contracts // 定义 interface
│ ├── Enums // 定义枚举:要求php8.1以上版本,且laravel9.x以上版本 https://laravel.com/docs/9.x/releases#enum-casting
│ │ └── ResponseCode.php
│ ├── Events // 事件处理
│ │ ├── Event.php
│ │ └── ExampleEvent.php
│ ├── Exceptions // 异常处理:结合 jiannei/laravel-response,可以更方便处理异常信息响应
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers // Controller 层根据 Request 将任务分发给不同 Service 处理,返回响应给客户端
│ │ │ ├── AuthController.php // 包含 jwt 授权示例
│ │ │ ├── Controller.php
│ │ │ └── UsersController.php // 包含 laravel-response 使用示例
│ │ ├── Middleware
│ │ │ └── Authenticate.php // 统一401响应
│ │ └── Resources
│ │ └── UserResource.php // 使用 API 转换资源数据
│ ├── Jobs // 异步任务
│ │ ├── ExampleJob.php
│ │ └── Job.php
│ ├── Listeners // 监听事件处理
│ │ └── ExampleListener.php
│ ├── Models // Laravel 原始的 Eloquent\Model:定义数据表特性、数据表之间的关联关系等;不处理业务
│ │ └── User.php
│ ├── Providers // 各种服务容器
│ │ ├── AppServiceProvider.php
│ │ ├── AuthServiceProvider.php
│ │ └── EventServiceProvider.php
│ ├── Services // Service 层:处理实际业务;调用 Model 取资源数据,分发 Job、Eevent 等
│ │ └── UserService.php
│ └── Support // 对框架的扩展,或者实际项目中需要封装一些与业务无关的通用功能集
│ ├── Traits
│ │ ├── Helpers.php // Class 中常用的辅助功能集
│ │ └── SerializeDate.php
│ └── helpers.php // 全局会用到的辅助函数
Controller => 校验请求后调用不同 service 进行业务处理,调用 API Resource 转换资源数据返回
Service => 具体的业务实现,调用 Model 取资源数据,处理业务,分发 event、job,
Model => 维护资源数据的定义,以及数据之间的关联关系
为了更好地理解 Repository & Service 模式,对 Laravel 中文社区的教程 2 中的 Larabbs 项目使用该模式进行了重构,实际开发过程可以参考其中的分层设计。
Controller 岗位职责:
__construct()
依赖注入多个 Service。比如 UserController
中可能会注入 UserService
(用户相关的功能业务)和 EmailService
(邮件相关的功能业务)$this->response
调用sucess
或fail
方法来返回统一的数据格式return Response::success(new UserCollection($resource));
或return Response::success(new UserResource($user));
Service 岗位职责:
handleListPageDisplay
和handleProfilePageDisplay
,分别对应用户列表展示和用户详情页展示的需求。EmailService
中或许就只有调用第三方 API 的逻辑,不需要更新维护系统中的数据,就不需要注入 Repository;OrderService
中实现了订单出库逻辑后,还需要生成相应的财务结算单据,就需要注入 OrderReposoitory
和FinancialDocumentRepository
,财务单据中的原单号关联着订单号,存在着数据关联。Model 岗位职责:
Model 层只需要相对简单地数据定义就可以了。比如,对数据表的定义,字段的映射,以及数据表之间关联关系等。
命名规范:
controller:
service:
UserService
、EmailService
和OrderService
动词+名词
,描述能够实现的业务需求。比如:handleRegistration
表示实现用户注册功能。使用规范:待补充
The Lumen Api Starter is open-sourced software licensed under the MIT license.