RESTful 是一種 API 設計風格,核心是資源導向 + HTTP 動詞語義化。本文從原理到代碼落地,並推薦輕量框架 PHPRS。
| 操作 | 傳統 URL | RESTful URL | HTTP Method |
|---|---|---|---|
| 獲取用戶列表 | /user/list | /user | GET |
| 獲取單用戶 | /user/view/id/1 | /user/1 | GET |
| 創建用戶 | /user/add | /user | POST |
| 更新用戶 | /user/edit/id/1 | /user/1 | PUT/PATCH |
| 刪除用戶 | /user/del/id/1 | /user/1 | DELETE |
$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 區分操作語義專為 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 更直觀、安全、可緩存,是現代微服務與前後端分離的首選風格。