首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 實現 RESTful API 設計最佳實踐

     編輯:PHP 相關知識

PHP 實現 RESTful API 設計最佳實踐

RESTful 是一種 API 設計風格,核心是資源導向 + HTTP 動詞語義化。本文從原理到代碼落地,並推薦輕量框架 PHPRS。

傳統 vs RESTful 對比

操作傳統 URLRESTful URLHTTP Method
獲取用戶列表/user/list/userGET
獲取單用戶/user/view/id/1/user/1GET
創建用戶/user/add/userPOST
更新用戶/user/edit/id/1/user/1PUT/PATCH
刪除用戶/user/del/id/1/user/1DELETE

核心實現邏輯

$path = $_SERVER['PATH_INFO'];          // 獲取 /user/1
$arr = explode('/', trim($path, '/'));  // ['user', '1']

if ($arr[0] === 'user') {
    $model = new UserModel();
    $id = $arr[1] ?? null;

    if ($id) {                    // 單資源
        switch ($_SERVER['REQUEST_METHOD']) {
            case 'GET':    echo json_encode($model->find($id)); break;
            case 'PUT':    echo $model->update($id, $_POST) ? 'success' : 'fail'; break;
            case 'DELETE': echo $model->delete($id) ? 'success' : 'fail'; break;
        }
    } else {                      // 集合資源
        switch ($_SERVER['REQUEST_METHOD']) {
            case 'GET':  echo json_encode($model->select()); break;
            case 'POST': echo $model->add($_POST) ? 'success' : 'fail'; break;
        }
    }
}

關鍵點

  • 用 PATH_INFO 解析資源路徑
  • 用 REQUEST_METHOD 區分操作語義
  • 統一返回 JSON,錯誤碼對應 HTTP 狀態碼(404、400、201 等)

輕量框架 PHPRS

專為 RESTful 設計,通過註解定義路由、參數、返回值、依賴注入:

/** @path("/hw") */
class HelloWorld {
    /** @route({"GET","/"}) */
    public function doSomething() { return "Hello World!"; }
}

/** @path("/tokens/") */
class Tokens {
    /** @route({"POST","/accounts/"})
     * @param({"account", "$._POST.account"})
     * @param({"password", "$._POST.password"})
     * @return({"body"}) {"token":"xxx", "uid":"xxx"}
     * @return({"cookie","token","$token","+365 days","/"}) */
    public function createTokenByAccounts($account, $password, &$token, &$uid) { ... }
}

特性:零配置、自動生成接口文檔、依賴注入、接口緩存、Hook 機制、配合 ezSQL 操作數據庫。

RESTful 讓 API 更直觀、安全、可緩存,是現代微服務與前後端分離的首選風格。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved