slavikme/slim-api-skeleton

基于Slim Framework 2的骨架项目,可立即开始开发API应用程序。

0.9.1 2015-08-09 12:56 UTC

This package is not auto-updated.

Last update: 2024-10-02 09:49:04 UTC


README

Open Issues Stars on GitHub Forks on GitHub Sponsor by PayPal GitHub license

Slim API Skeleton

基于Slim Framework 2的骨架项目,旨在让开发者能够立即开始开发API应用程序。

注意:这是一个alpha版本,目前正在开发过程中

欢迎贡献!

实现

  • Composer创建项目功能
  • 单文件应用程序配置
  • 关系型数据库支持
  • 基于API令牌的认证支持,以下为用户信息来源
    • 来自关系型数据库
  • 可定制的API令牌过期时间,预设默认值和最大值
  • 单文件路由设置
    • 定义HTTP方法或方法数组
    • 带有参数的路由
    • 控制器类和类方法
    • 为参数定义条件
  • 支持控制器类

待办事项

  1. 添加基于API密钥的认证支持,以下为用户信息来源
  2. 来自配置文件
  3. 来自大数据/NoSQL记录
  4. 添加授权支持
  5. 添加日志记录
  6. 添加缓存机制
  7. 自动文档生成器

推荐

强烈建议在基于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+安装说明

安装

不完整!

  1. 打开命令行界面。

  2. 导航到您想创建项目目录的路径。

  3. 运行以下命令

    composer create-project slavikme/slim-api-skeleton
    
  4. 按照说明操作。

  5. 创建一个虚拟主机,主机名为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路由,通过发送必需的凭据usernamepassword以及可选的凭据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 - 解释错误原因的字符串。如果errortrue,则始终包含。
  • 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;