一、前言
- 前段时间,有读者建议我出一个 Lumen 项目示例。除了本文之外,整个系列还包含 Lumen实例讲解:第二部分 以及 Lumen实例讲解:第三部分。
- 同样也要借此机会,介绍一下 Module(模块化) 的代码结构,针对本文,具体的目录层次如下:
/app
....../Base # 定义基础类
....../Common # 定义常量、全局函数
....../Middlewares
....../Modules
....../....../Job # Job模块
....../....../Signature # Signature模块
....../....../Token # Token模块
....../....../Task # Task模块
....../....../User # User模块
....../Providers
............others............
/bootstrap
/config # 配置文件目录
/database
/routes
......others.......
复制代码
- 文件树高清图:
二、说明
- 还没有书写注释和完整的业务逻辑,所以新手可能理解难度较高,后面在下会慢慢花时间讲解:如何基于 Lumen 开箱即用的队列,优雅地实现 定时任务系统。
- 项目开发环境使用最新的 Lumen 5.8.x 以及 PHP 7.2.16 版本。
- 想要快速上手,可以使用本人至今 'Windows' 下正常开发使用的 整合压缩包 。
三、开始
-
确定本地已经安装了 Composer 环境。并从 代码仓库 克隆了最新的代码。
-
注意:git clone 完成后要执行
composer install
安装依赖。 -
熟悉 Laravel 的读者应该会习惯使用
php artisan serve
指令快速启动服务,鉴于 Lumen 开箱地精简掉了许多 Artisan 指令,因此本人特意从 Laravel 中提取了 ServeCommand.php 作为 Lumen 项目的扩展,感兴趣的读者可以查看这个 packagist,当然,本文的项目已经默认包含了本扩展。 -
具体实现的接口功能如下: 4.1. 添加定时任务接口
HTTP/1.1 200 OK. POST {{base_url}}/api/task/add @请求头部 Authorization = "de70b9e96776b15" # (普通管理员)客户端申请的短期Token Random-Seed = "fabcdefgsffhhklpoiu" # (普通管理员)客户端生成数据签名的随机字符串 Signature = "a54ddf0ccc3f3bffab1f8e" # (普通管理员)客户端生成的数据签名 @请求模板: { "callback_url": "http://127.0.0.1:8001", "callback_header": { "Content-Type": "application/json" }, "callback_time": "2019-4-22 16:21:51", "task_title": "test task", "callback_body": { "course_id": 1, "lesson_id": 25 } } @成功响应: { "status_code": 200, "data": { "task_uuid": "54ddf0cceecac4b3349c3f3bffab1f8e", "status": "待执行", "task_title": "test task", "created_at": "2019-04-30 11:18:20", "first_execute": "", "success_execute": "", "failure_execute": "" } } 复制代码
4.2. 查询定时任务接口
HTTP/1.1 200 OK. GET {{base_url}}/api/task/seed/{task_uuid} task_uuid = "54ddf0cceecac4b3349c3f3bffab1f8e" @请求头部 Authorization = "de70b9b9bf5776b15" # 客户端申请的短期Token @成功响应: { "status_code": 200, "data": { "task_uuid": "54ddf0cceecac4b3349c3f3bffab1f8e", "status": "待执行", "task_title": "test task", "created_at": "2019-04-30 11:18:20", "first_execute": "", "success_execute": "", "failure_execute": "" } } 复制代码
4.3. 定时任务列表接口
HTTP/1.1 200 OK. GET {{base_url}}/api/task/all @请求头部 Authorization = "de70b996776b15" # 客户端申请的短期Token @成功响应: { "status_code": 200, "data": { "pagination": { "total": 1, "count": 1, "per_page": 10, "current_page": 1, "last_page": 1 }, "data": [ { "task_uuid": "de70b9b9bf5fb13ff6e96776839ceb15", "status": "待执行", "task_title": "test task", "created_at": "2019-04-30 10:54:27", "first_execute": "", "success_execute": "", "failure_execute": "" } ] } } 复制代码
4.4. 删除定时任务接口
HTTP/1.1 200 OK. GET {{base_url}}/api/task/del/{task_uuid} task_uuid = de70b9b9bf5fb13ff6e96776839ceb15 @请求头部 Authorization = "de70b96776b15" # (超级管理员)客户端申请的短期Token @成功响应: { "status_code": 200, "data": true } 复制代码
4.5. 添加普通管理员接口
HTTP/1.1 200 OK. POST {{base_url}}/api/user/add @请求头部 Authorization = "de70b976b15" # (超级管理员)客户端申请的短期Token @请求模板: { "username": "test", "password": "123456", "email": "tynadam@qq.com" } @成功响应: { "status_code": 200, "data": { "user_id": 2, "username": "test", "email": "tynadam@qq.com", "role": "普通管理员", "permission": [ "1.添加Task", "2.查看Task列表", "3.查询Task", "4.申请短期Token" ] } } 复制代码
4.6. 查询管理员接口
HTTP/1.1 200 OK. GET {{base_url}}/api/task/seek/{user_id} user_id = 2 @请求头部 Authorization = "de70b776b15" # (超级管理员)客户端申请的短期Token @成功响应: { "status_code": 200, "data": { "user_id": 2, "username": "test", "email": "tynadam@qq.com", "role": "普通管理员", "permission": [ "1.添加Task", "2.查看Task列表", "3.查询Task", "4.申请短期Token" ] } } 复制代码
4.7. 所有管理员列表接口
HTTP/1.1 200 OK. GET {{base_url}}/api/user/all @请求头部 Authorization = "de70b9b9bf6b15" # (超级管理员)客户端申请的短期Token @成功响应: { "status_code": 200, "data": { "pagination": { "total": 2, "count": 2, "per_page": 10, "current_page": 1, "last_page": 1 }, "data": [ { "user_id": 1, "username": "AdamTyn", "email": "tynadam@foxmail.com", "role": "超级管理员", "permission": [ "1.删除Task", "2.查看Task列表", "3.查询Task", "4.申请短期Token", "4.添加User", "6.查看User列表", "7.查询User", "8.删除User" ] }, { "user_id": 2, "username": "test", "email": "tynadam@qq.com", "role": "普通管理员", "permission": [ "1.添加Task", "2.查看Task列表", "3.查询Task", "4.申请短期Token" ] } ] } } 复制代码
4.8. 删除普通管理员接口
HTTP/1.1 200 OK. GET {{base_url}}/api/user/del/{user_id} user_id = 2 @请求头部 Authorization = "de70b9b76b15" # (超级管理员)客户端申请的短期Token @成功响应: { "status_code": 200, "data": true } 复制代码
4.9. 获取短期Token接口
HTTP/1.1 200 OK. GET {{base_url}}/api/auth/token @请求模板: { "username": "test", "password": "123456" } @成功响应: { "status_code": 200, "data": { "user_id": 1, "expired_at": "2019-05-04 18:27:17", "token": "1af50bd86c790755bc0a7f9f81f841fe" } } 复制代码
-
完整功能的所有API列表:
四、结语
- 本教程面向新手,还有剩下的 Lumen实例讲解:第二部分 ) 以及 Lumen实例讲解:第三部分 教程会在近期推出。
- 随着系统升级,软件更新,以后的配置可能有所变化,在下会第一时间测试并且更新教程;
- 欢迎联系在下,讨论建议都可以,之后会发布其它的教程。
- 后面紧锣密鼓地将会推出 Laravel业务篇 系列的教程,敬请期待。