slavikme / slim-api-skeleton
基于Slim Framework 2的骨架项目,可立即开始开发API应用程序。
Requires
- php: >=5.5.0
- composer/composer: dev-master
- entomb/slim-json-api: dev-master
- incenteev/composer-parameter-handler: ~2.0
- needcaffeine/slim-api-extras: ^1.0
- slim/pdo: dev-master
- slim/slim-skeleton: 2.*
- slimcontroller/slimcontroller: 0.4.3
- techsterx/slim-config-yaml: 1.*
- tuupola/slim-jwt-auth: ^0.3.0
- wp-cli/php-cli-tools: ^0.10.4
This package is not auto-updated.
Last update: 2024-10-02 09:49:04 UTC
README
Slim API Skeleton
基于Slim Framework 2的骨架项目,旨在让开发者能够立即开始开发API应用程序。
注意:这是一个alpha版本,目前正在开发过程中
欢迎贡献!
实现
- Composer创建项目功能
- 单文件应用程序配置
- 关系型数据库支持
- 基于API令牌的认证支持,以下为用户信息来源
- 来自关系型数据库
- 可定制的API令牌过期时间,预设默认值和最大值
- 单文件路由设置
- 定义HTTP方法或方法数组
- 带有参数的路由
- 控制器类和类方法
- 为参数定义条件
- 支持控制器类
待办事项
- 添加基于API密钥的认证支持,以下为用户信息来源
- 来自配置文件
- 来自大数据/NoSQL记录
- 添加授权支持
- 添加日志记录
- 添加缓存机制
- 自动文档生成器
推荐
强烈建议在基于UNIX的操作系统(Linux或Macintosh)上安装此框架,因为它可以使一切运行得更加顺畅且更快。
当然您也可以在Windows上运行它,但我建议您节省宝贵的时间并避免不必要的麻烦。
在本文档中,我将解释如何在基于UNIX的系统上运行它,而不是在Windows上。如果您仍然想在Windows上安装它,很抱歉,但您将不得不自己解决问题。
注意:您可以使用VM(虚拟机)运行Linux,使用VirtualBox或任何其他虚拟机来安装Linux OS。然后,在您VM上新安装的Linux上继续本文档。
要求
- Apache 2.x(或如果您更愿意使用Nginx,您将必须确保将Authorization头传递到您的PHP应用程序中,如
public/.htaccess
文件中所述。此外,您应将所有内容重写为指向public/app.php
文件) - PHP 5.6+
- MySQL 5.5+
- Composer 0.9+(安装说明)
安装
不完整!
-
打开命令行界面。
-
导航到您想创建项目目录的路径。
-
运行以下命令
composer create-project slavikme/slim-api-skeleton
-
按照说明操作。
-
创建一个虚拟主机,主机名为
slimapi.local
,并将基本目录指向public
目录。
使用方法
不完整!
只需调用在routes.yml
中定义的任何路径,并将从以下认证过程中获得的令牌放在Authorization
请求头中的Bearer
短语之后。例如
GET / HTTP/1.1
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0aW1lIjoxNDM5MDQzMDkxLCJleHB0aW1lIjogMTQzOTA0NDI5MSwidXNlciI6eyJpZCI6IjEiLCJ1c2VybmFtZSI6ImVhc3Rlci1lZ2ciLCJyb2xlIjoiQURNSU4iLCJuYW1lIjoiQ29uZ3JhdHMsIE5vdyBZb3UgVW5kZXJzdGFuZCBUaGUgSldUIFByb3RvY29sIiwiZW1haWwiOiJnb29kQGpvYi5jb20iLCJzdGF0dXMiOiIxIiwibGFzdGxvZ2luX3RpbWUiOiIyMDE1LTA4LTA2IDE3OjEwOjA0In19.4YHynX_j2mhXLWGgLTHTf6IgY5HwHBIzl8mUqQa8vUw
Host: api.slim.local
Connection: close
认证
此框架中实现的认证方法是JWT(JSON Web Tokens)。
已实施了一种特殊的认证路由,并且可直接使用。
请求
使用/auth
路由,通过发送必需的凭据username
和password
以及可选的凭据remember_minutes
进行认证,这些凭据可以放在请求体的表单或JSON格式中(两者都同等支持)。
请求体应如下发送
JSON格式
{
"username": "john",
"password": "Snow123",
"expiration": "45 minutes"
}
注意:为了使其正常工作,必须在与请求头一起发送
Content-Type: application/json
头属性。
表单格式
username=john&password=Snow123&expiration=45%20minutes
请求参数
username
- 来自tbl_user
表的用户名(见数据库 - 用户表部分)。password
- 来自tbl_user
表的密码(见数据库 - 用户表部分)。expiration
- 访问令牌过期的时间/日期字符串(与PHP的strtotime()函数接受其第一个参数的值相同)。此参数是可选的,可能不会发送。如果此参数不会发送,则默认值将使用config/parameters.yml
文件中定义的auth.lifetime
属性中的值。
响应
响应取决于请求。如果没有请求不同的、错误的或无效的参数,或者没有在tbl_user
表中找到任何用户名密码匹配,或者用户的状态等于或低于0,则响应将始终以HTTP状态码401返回,并在体中包含以下JSON数据
{
"error": true,
"msg": "Unauthorized access",
"status": 401
}
否则,认证应成功,响应状态码为200,响应体类似于以下内容
{
"error": false,
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0aW1lIjoxNDM5MDQzMDkxLCJleHB0aW1lIjogMTQzOTA0NDI5MSwidXNlciI6eyJpZCI6IjEiLCJ1c2VybmFtZSI6ImVhc3Rlci1lZ2ciLCJyb2xlIjoiQURNSU4iLCJuYW1lIjoiQ29uZ3JhdHMsIE5vdyBZb3UgVW5kZXJzdGFuZCBUaGUgSldUIFByb3RvY29sIiwiZW1haWwiOiJnb29kQGpvYi5jb20iLCJzdGF0dXMiOiIxIiwibGFzdGxvZ2luX3RpbWUiOiIyMDE1LTA4LTA2IDE3OjEwOjA0In19.4YHynX_j2mhXLWGgLTHTf6IgY5HwHBIzl8mUqQa8vUw",
"status": 200
}
响应参考
status
- 响应的状态,通常是响应状态码。始终包含在响应中。error
- 表示是否发生了任何错误。如果发生错误,将返回true
以及msg
参数,否则将返回false
。始终包含在响应中。msg
- 解释错误原因的字符串。如果error
为true
,则始终包含。token
- 一个有效的JWT认证令牌,用于在此API中进行认证请求(用法见请求 - 认证用法部分)。
认证用法
待完成:完成本节
数据库
用户表
以下代码用于手动创建新用户表。
CREATE TABLE `tbl_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`password` varchar(255) NOT NULL,
`role` varchar(50) NOT NULL,
`name` varchar(255) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`create_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
`status` tinyint(4) NOT NULL DEFAULT '1',
`lastlogin_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username_UNIQUE` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;