一、前言
- 前段时间,有读者建议我出一个 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" # (普通管理员)客户端申请的短期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": ""
}
}
查询定时任务接口
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业务篇 系列的教程,敬请期待。