基于PHP SLIM 框架搭建 RESTful 风格API 示例

PHP是快速搭建网站的利器,在中小网站有着广泛的应用。Slim是一个PHP微型框架,可以帮你快速创建强劲的Web应用和API。经常有人讨论说那种PHP框架更好,其实这个问题就像语言本身的争论一样,是没有什么标准答案的。就看合适不合适。看到有人说过这么一句话,说PHP的框架也可以按层次或者使用阶段来,比如

最精简系: 类似 Slim Framework    /     功能齐全:类似 CI YII Cake    /  更高级一点的:比如  Laravel 。

今天想简单介绍一下 Slim ,官网自己号称是一个 微型框架 ,就好比 Python 里的 Flask  。 官网原话:Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs. 


代码片段:

get('/hello/{name}', function (Request $request, Response $response) {
    $name = $request->getAttribute('name');
    $response->getBody()->write("Hello, $name");

    return $response;
});
$app->run();


1. 安装 

1)在系统上安装PHP、MySQL和应用服务器如 apache httpd

2)安装PHP应用包管理器 Composer(类似于自动构建工具,如 JAVA -- Maven Gradle, Python -- PIP Ruby -- GEM 等)

$ curl -sS https://getcomposer.org/installer | php
$ mv composer.phar /usr/local/bin/composer

#或者比如MAC 下用 brew 

$ brew tap josegonzalez/homebrew-php  
$ brew install josegonzalez/php/composer  

3) 创建你应用所在的目录,然后下载相关slim包

如 /Users/aabb/source/php (或者 D:\phpwebroot) 下创建目录 如 slim 及下级目录 slim\src\public

4)在 slim\src 下执行如下命令,下载依赖包

composer require slim/slim "^3.0"

下载完成后,会看到如下文件

composer.json	composer.lock	public	vendor

5)在 slim/src/public 目录下 创建 index.php ,写入

get('/', function ($request, $response, $args) {
 $response->write("Hello, Welcome to Slim Framework!!!");
 return $response;
});
$app->run();
~                


6)如果你使用的是apache httpd 应用服务器,请在slim目录下创建 .htaccess, 写入

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]

7)在slim/src 目录下执行如下命令

$ php -S localhost:7777  #后面的端口号可以任意设置,只要不冲突
(你也可以将其移动到应用服务器对应的目录,然后配置一个server,具体参见 这里 )

8)打开浏览器,输入 localhost:7777, 可以看到页面上输出了

基于PHP SLIM 框架搭建 RESTful 风格API 示例_第1张图片

2. 数据库准备

这里我们以一个简单的员工信息做为示例,在MySQL中某个数据库下创建表 employee ,如

CREATE TABLE IF NOT EXISTS `employee` (
  `employee_id` int(11) NOT NULL,
  `emp_name` varchar(100) NOT NULL,
  `emp_contact` varchar(100) NOT NULL,
  `emp_role` varchar(100) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
 
 
INSERT INTO `employee` (`employee_id`, `emp_name`, `emp_contact`, `emp_role`) VALUES
(1, 'Hardik Vyas', '94085xxxxx', 'Web Developer'),
(3, 'Raj K Joshi', '996633XXX', 'SEO Master'),
(4, 'Ram D Rv', '55555XXX', 'Admin');

3. 程序文件 

1) slim\src\public\lib\mysql.php


2) slim\src\public\dboper.php 

get('/', 'get_employee');

$app->get('/employee/{id}', function($request, $response, $args) {
    get_employee_id($args['id']);
});
$app->post('/employee_add', function($request, $response, $args) {
    add_employee($request->getParsedBody());//Request object’s getParsedBody() method to parse the HTTP request 
});
$app->put('/update_employee', function($request, $response, $args) {
    update_employee($request->getParsedBody());
});
$app->delete('/delete_employee', function($request, $response, $args) {
    delete_employee($request->getParsedBody());
});
$app->run();
 
function get_employee() {
    $db = connect_db();
    $sql = "SELECT * FROM employee ORDER BY `emp_name`";
    $exe = $db->query($sql);
    $data = $exe->fetch_all(MYSQLI_ASSOC);
    $db = null;
    echo json_encode($data);
}
 
function get_employee_id($employee_id) {
    $db = connect_db();
    $sql = "SELECT * FROM employee WHERE `employee_id` = '$employee_id'";
    $exe = $db->query($sql);
    $data = $exe->fetch_all(MYSQLI_ASSOC);
    $db = null;
    echo json_encode($data);
}
 
function add_employee($data) {
    $db = connect_db();
    $sql = "insert into employee (emp_name,emp_contact,emp_role)"
            . " VALUES('$data[emp_name]','$data[emp_contact]','$data[emp_role]')";
    $exe = $db->query($sql);
    $last_id = $db->insert_id;
    $db = null;
    if (!empty($last_id))
        echo $last_id;
    else
        echo false;
}
 
function update_employee($data) {
    $db = connect_db();
    $sql = "update employee SET emp_name = '$data[emp_name]',emp_contact = '$data[emp_contact]',emp_role='$data[emp_role]'"
            . " WHERE employee_id = '$data[employee_id]'";
    $exe = $db->query($sql);
    $last_id = $db->affected_rows;
    $db = null;
    if (!empty($last_id))
        echo $last_id;
    else
        echo false;
}
 
function delete_employee($employee) {
    $db = connect_db();
    $sql = "DELETE FROM employee WHERE employee_id = '$employee[employee_id]'";
    $exe = $db->query($sql);
    $db = null;
    if (!empty($last_id))
        echo $last_id;
    else
        echo false;
}
 
?>

说明:

1)每个HTTP请求都有一个请求体,它可能是JSON、XML或者其他POST数据数组。这个函数用来机械这些请求参数。

2)看看这段代码,是不是相当简洁,可读性很好

3)use这一句,表示将请求和响应类导入我们的程序。这样我们不用写上长长的名字来引用它

4)接下来我们包含了 vendor/autoload.php -- 这个有Composer自动创建的目录和文件,引入后我们可以自动使用相关依赖文件。

5)最后我们创建 $app 对象, $app->get() 调用我们的第一个 路由 

6)不要忘记在最后调用 $app->run(), 告诉Slim我们已经完成配置,它可以启动和监听了


4. 启动和测试

1) 通过在 src\public 目录下 调用 $ php -S localhost:7777 来启动

2)调用 ,在浏览器栏中输入,测试GET所有员工信息

http://localhost:7777/dboper.php
基于PHP SLIM 框架搭建 RESTful 风格API 示例_第2张图片

3)通过其他接口测试工具来测试这些接口,比如postman soapUI 或者火狐浏览器的 RestClient 或 Chrome 的 Advanced Rest Client 插件。


你可能感兴趣的:(学习笔记)