1. 程式人生 > >基於PHP SLIM 框架搭建 RESTful 風格API 示例

基於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.

程式碼片段:

<?php
use \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.json	composer.lock	public	vendor

5)在 slim/src/public 目錄下 建立 index.php ,寫入
<?php
use \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 on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . 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

<?php

function 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 

<?php

use \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 或者火狐瀏覽器的 或 Chrome 的

相關推薦

基於PHP SLIM 框架搭建 RESTful 風格API 示例

PHP是快速搭建網站的利器,在中小網站有著廣泛的應用。Slim是一個PHP微型框架,可以幫你快速建立強勁的Web應用和API。經常有人討論說那種PHP框架更好,其實這個問題就像語言本身的爭論一樣,是沒有什麼標準答案的。就看合適不合適。看到有人說過這麼一句話,說PHP的框架也

[CI] 使用CodeIgniter框架搭建RESTful API服務

解釋 valid 源碼 stat target 面向服務 prot 多次 1.0 在2011年8月的時候,我寫了一篇博客《使用CodeIgniter框架搭建RESTful API服務》,介紹了RESTful的設計概念,以及使用CodeIgniter框架實現RESTful

Java後臺框架篇--Spring與Restful風格API介面開發

Restful風格的API是一種軟體架構風格,設計風格而不是標準,只是提供了一組設計原則和約束條件。它主要用於客戶端和伺服器互動類的軟體。基於這個風格設計的軟體可以更簡潔,更有層次,更易於實現快取等機制。 在Restful風格中,使用者請求的url使用同一個url而用請求方式:get,post,

Go實戰--通過gin-gonic框架搭建restful api服務(github.com/gin-gonic/gin)

users .post sage 事先 eat mas routes pac 操作mysql 生命不止,繼續 go go go !!! 先插播一條廣告,給你堅持學習golang的理由: 《2017 軟件開發薪酬調查:Go 和 Scala 是最賺錢的語言》 言歸正傳!

Go實戰--通過httprouter和redis框架搭建restful api服務(github.com/julienschmidt/httprouter)

生命不止,繼續 go go go !!! httprouter HttpRouter is a lightweight high performance HTTP request router (also called multiplexer or ju

基於Jersey框架搭建Restful Java Web Service的基本步驟

本文由Markdown語法編輯器編輯完成。 1. Restful Web Service 2. Restful的基本框架 3. 基於Jersey框架搭建Restful Web Service的基本步驟 Jersey框架不僅實現了JAX-RS規

基於MVC的RESTFul風格API實戰

### 基於`MVC`的`RESTful`風格的實現 #### 1.`RESTful`風格闡述 > `REST`服務是一種`ROA`(Resource-Oriented Architecture,面向資源的架構)應用。主要特點是方法資訊存在於`HTTP`協議的方法中(`GET`,`POST`,`PUT`,

php laravel 框架搭建與運行

all config blog tco ons repos lar const download 目錄 安裝 composer 安裝 laravel 運行 php hello world 一、安裝 composer (mac)   下載 composer.p

通過beego快速創建一個Restful風格API項目及API文檔自動化(轉)

master 功能 eas study run 視頻教程 innodb uic default 通過beego快速創建一個Restful風格API項目及API文檔自動化 本文演示如何快速(一分鐘內,不寫一行代碼)的根據數據庫及表創建一個Restful風格的API項目,

SSM框架RESTful風格的實現

層次 article delet 註解 服務器 ppi ble req variable REST這個詞,是Roy Thomas Fielding在他2000年的博士論文中提出的。 如果一個架構符合REST原則,就稱它為RESTful架構。 REST,即Representa

搭建Restful風格WebServcie

目錄 1.Restful風格介紹 表現層狀態轉換(REST,英文:Representational State Transfer)是Roy Thomas Fielding博士於2000年在他的博士論文[1] 中提出來的一種全

Jersey2+swagger組建restful風格api及文件管理

1.jar包引入 <dependency> <groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-server<

Restful風格api設計(倒置)

批量操作的倒置 往往有這樣一種情況,使用者需要對列表頁的多行記錄進行批量操作,如果要求前端逐個向後端請求既不能保證操作的一致性(雖然批量操作時後端也未必能保證事務),也在檢視操作日誌時產生困惑。所以儘量一次請求,那麼api怎麼設計呢,下面以給多個學員分配一個老師為例(一個學員只能有一個老師,而一

CXF+JAX-RS搭建RESTful風格的WebService

概述         因公司要實現兩個不同專案之間的RESTful介面訪問,技術選型是CXF和JAX-RS。接下來要解決的事情是:         1,在兩個專案中加入CX

Restful風格API介面開發springMVC篇(put delete請求如何設定)

  Restful風格API介面開發springMVC篇 Restful風格的API是一種軟體架構風格,設計風格而不是標準,只是提供了一組設計原則和約束條件。它主要用於客戶端和伺服器互動類的軟體。基於這個風格設計的軟體可以更簡潔,更有層次,更易於實現快取等機制。

【Python】利用Django搭建REST風格API後臺服務(三)關於DRF的搜尋、分頁、排序

原文地址 簡介 這是第三篇內容,接下來我們介紹一下如何使用REST framework框架自帶的一些功能來豐富你的API。 我們都知道利用API獲取資源的場景下,不止是傻傻的查詢所有資料,然後對資料程序採集。我們如果要按照要求來篩選我們要的資料呢? 比如,

Restful風格API中用put還是post做新增操作有什麼區別?

這個是華為面試官問我的問題,回來我找了很多資料,想驗證這個問題。在回答問題之前,還需要蒐集一些基礎知識。 1 HTTP協議詳解 HTTP是HyperText Transfer Protocol(超文字傳輸協議)的縮寫。它的發展是全球資訊網協會(WorldWide Web

用ssm框架搭建CRUD風格專案完整過程

ssm-crud簡介: SSM-CRUD ssm:SpringMVC+Spring+MyBatis CRUD:Create(建立) Retrieve(查詢) Update(更新) Delete(刪除) 功能點

基於.NET Core 框架搭建WebApi專案

using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Net.Http.H

實習小結十三:基於PHP ZF框架的文章管理模組

這是我最近兩三週做的一個Post模組,從資料庫到後臺,前臺,資料庫設計和總體設計都已經給我了,我也參考了不少已有模組的程式碼。剛開始7天,我用來實現post模組的增刪改查的基本功能,之後的時間,就是修改一些邏輯程式碼,以及增添新功能,就像小結12裡面寫的ajax