基于PHP SLIM 框架搭建 RESTful 风格API 示例
来源:互联网 发布:mysql还原数据库 编辑:程序博客网 时间:2024/05/01 23:36
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.
代码片段:
<?phpuse \Psr\Http\Message\ServerRequestInterface as Request;use \Psr\Http\Message\ResponseInterface as Response;require 'vendor/autoload.php';$app = new \Slim\App;$app->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.jsoncomposer.lockpublicvendor
5)在 slim/src/public 目录下 创建 index.php ,写入
<?phpuse \Psr\Http\Message\ServerRequestInterface as Request;use \Psr\Http\Message\ResponseInterface as Response;require '../vendor/autoload.php';$app = new Slim\App();//slim application routes$app->get('/', function ($request, $response, $args) { $response->write("Hello, Welcome to Slim Framework!!!"); return $response;});$app->run();~
6)如果你使用的是apache httpd 应用服务器,请在slim目录下创建 .htaccess, 写入
RewriteEngine onRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule . index.php [L]
7)在slim/src 目录下执行如下命令
$ php -S localhost:7777 #后面的端口号可以任意设置,只要不冲突(你也可以将其移动到应用服务器对应的目录,然后配置一个server,具体参见 这里 )
8)打开浏览器,输入 localhost:7777, 可以看到页面上输出了
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
<?phpfunction connect_db() { $server = 'localhost'; // this may be an ip address instead $user = 'root'; $pass = 'ds332527'; $database = 'rest'; // name of your database $connection = new mysqli($server, $user, $pass, $database); return $connection;}?>
2) slim\src\public\dboper.php
<?phpuse \Psr\Http\Message\ServerRequestInterface as Request;use \Psr\Http\Message\ResponseInterface as Response;require '../vendor/autoload.php';require 'lib/mysql.php';$app = new Slim\App();$app->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 <code>getParsedBody()</code> 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
3)通过其他接口测试工具来测试这些接口,比如postman soapUI 或者火狐浏览器的 RestClient 或 Chrome 的 Advanced Rest Client 插件。
- 基于PHP SLIM 框架搭建 RESTful 风格API 示例
- 一个简单的php restful 框架 slim framework
- Restful风格的SSM框架搭建
- RESTful风格的SSM框架搭建
- 基于Slim微型框架实现强大的API—— Slim入门篇
- Spring Restful 风格示例
- 使用CodeIgniter框架搭建RESTful API服务
- 用SSM搭建restful API协议框架
- 浅析RESTFUL 风格API
- restful 风格API 实践
- restful 风格api
- 基于jersey搭建RESTful风格的WebService接口
- PHP与 RESTful风格的swagger结合生成API
- php,采用slim和notorm搭建Restful轻量级curd服务层,及中文字符解决
- Spring框架之基于Restful风格实现的SpringMVC
- ubuntu 下面通过maven搭建restful风格的jersey框架
- Spring RESTful风格url示例
- Spring RESTful风格url示例
- Java并发编程-非阻塞同步方式原子类(Atomic)的使用
- 刺客信条-软件设计准则
- java中的函数式编程(一)
- 广东海洋大学 电子1151 孔yanfei python语言程序设计 第八周
- xcode打包的几种方式
- 基于PHP SLIM 框架搭建 RESTful 风格API 示例
- Xcode 依赖管理带来的静态库动态库分析
- 第十一周上机实践——警察和厨师(2)(补)
- 实现SwipeMenuListView特定item的右滑menu无效
- zynq 音乐播放流程
- mac 命令
- android.support.v4.app.Fragment$InstantiationException问题解决
- 广东海洋大学 电子1151 孔yanfei python语言程序设计 第九周
- This application's application-identifier entitlement does not match that of the installed applicati