一、前言
- 前段时间,有读者建议我出一个 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,当然,本文的项目已经默认包含了本扩展 具体实现的接口功能如下:
添加定时任务接口
HTTP/1.1 200 OK. POST {{base_url}}/api/task/add@请求头部Authorization = "de70b9e96776b15" # (普通管理员)客户端申请的短期TokenRandom-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": ""}}
查询定时任务接口
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": ""}}
定时任务列表接口
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": ""}]}}
删除定时任务接口
HTTP/1.1 200 OK. GET {{base_url}}/api/task/del/{task_uuid}task_uuid = de70b9b9bf5fb13ff6e96776839ceb15@请求头部Authorization = "de70b96776b15" # (超级管理员)客户端申请的短期Token@成功响应:{"status_code": 200,"data": true}
添加普通管理员接口
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"]}}
查询管理员接口
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"]}}
所有管理员列表接口
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"]}]}}
删除普通管理员接口
HTTP/1.1 200 OK. GET {{base_url}}/api/user/del/{user_id}user_id = 2@请求头部Authorization = "de70b9b76b15" # (超级管理员)客户端申请的短期Token@成功响应:{"status_code": 200,"data": true}
获取短期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"}}
-
四、结语
本教程面向新手,还有剩下的 Lumen实例讲解:第二部分 以及 Lumen实例讲解:第三部分 教程会在近期推出。
- 随着系统升级,软件更新,以后的配置可能有所变化,在下会第一时间测试并且更新教程;
- 欢迎联系在下,讨论建议都可以,之后会发布其它的教程。
- 后面紧锣密鼓地将会推出 Laravel业务篇 系列的教程,敬请期待。
