REST的
代表性國家轉移
REST 是 代表性國家轉移.
什麼是 代表性國家轉移?
用於設計網頁應用程式的架構風格。在幾乎所有情況下,它都依賴無狀態、客戶端-伺服器、可快取的通訊協議, HTTP 協定. REST 背後的理念是將所有伺服器端資源視為可以透過一組定義的操作來建立、讀取、更新或刪除的物件。此概念與 HTTP 支援的標準操作緊密結合:POST、GET、PUT 和 DELETE。
為什麼稱為代表性狀態轉移
術語 代表性國家轉移 被選擇的具體原因是:
- 代表性的 指透過網路傳輸的資源表示(您從伺服器請求的文件或物件)。客戶端可以輕鬆處理這些格式的表示,例如 XML的, JSON, 或者 雅美.
- 狀態轉移 意味著每個客戶端和伺服器互動都會傳輸一個狀態。當客戶端請求資源時,伺服器的回應本質上是將資源的狀態傳送給客戶端。這種狀態傳輸允許 RESTful 應用程式成為無狀態的,這意味著從客戶端到伺服器的每個請求都必須包含理解和完成該請求所需的所有資訊。伺服器不會在伺服器端儲存有關客戶端會話的任何狀態。
休息原則
REST 建立在幾個關鍵原則之上,這些原則定義了 REST 的簡單性和強大功能:
- 無國籍: 從客戶端到伺服器的每個請求都必須包含瞭解和完成請求所需的所有資訊。伺服器沒有會話狀態;它完全保留在客戶端。
- 客戶端服務器: 統一的介面將客戶端與伺服器分開。這種關注點分離支援客戶端邏輯和伺服器端資料儲存的獨立演進,提高客戶端介面跨多個平台的可攜性。
- 可緩存: 回應必須將自身定義為可快取或不可緩存,以防止客戶端重複使用過時或不適當的資料來回應進一步的請求。
- 分層系統: 客戶端通常無法判斷它是直接連接到終端伺服器還是連接到中介。中間伺服器可以透過啟用負載平衡和提供共享快取來提高系統的可擴展性。
- 統一接口: 為了獲得 REST 的優勢,應用程式必須遵守統一的介面。這通常涉及以一致的方式使用標準 HTTP 方法並遵循資源導向的 URL。
PHP 範例
在 PHP 中建立 RESTful API 涉及處理 HTTP 請求(GET、POST、PUT、DELETE)並以 JSON 或 XML 等格式回應資料。以下是 PHP 中管理任務清單的 RESTful API 的簡化範例。為了簡單起見,此範例示範如何處理 GET 和 POST 請求。
這個 PHP 範例將向您展示如何建立兩個端點:一個用於檢索任務清單(GET /tasks
)和另一個用於新增任務(POST /tasks
).
index.php
– 入口點
<?php
// Define a simple array of tasks as our "database"
$tasks = [
['id' => 1, 'title' => 'Buy groceries', 'completed' => false],
['id' => 2, 'title' => 'Finish homework', 'completed' => false]
];
// Get the request method
$requestMethod = $_SERVER['REQUEST_METHOD'];
// Simple router
switch ($requestMethod) {
case 'GET':
getTasks();
break;
case 'POST':
addTask();
break;
default:
// Handle other HTTP methods or return an error
header('HTTP/1.1 405 Method Not Allowed');
break;
}
function getTasks() {
global $tasks;
header('Content-Type: application/json');
echo json_encode($tasks);
}
function addTask() {
global $tasks;
$input = json_decode(file_get_contents('php://input'), true);
if (!isset($input['title']) || !isset($input['completed'])) {
header('HTTP/1.1 400 Bad Request');
echo json_encode(['message' => 'Missing title or completed status']);
return;
}
$newTask = [
'id' => end($tasks)['id'] + 1,
'title' => $input['title'],
'completed' => $input['completed']
];
$tasks[] = $newTask;
header('Content-Type: application/json');
echo json_encode($newTask);
}
?>
如何操作
- 該腳本充當簡單的 API 端點。根據 HTTP 請求方法,它要么返回任務列表(
GET
)或將新任務新增至清單(POST
). - 為
GET
請求,它只是輸出$tasks
JSON 格式的陣列。 - 為
POST
請求時,它從請求正文中讀取 JSON 有效負載(假設包含title
和completed
狀態),新增一個新任務到$tasks
數組,並以 JSON 形式傳回新任務。 - 此範例使用 PHP 全域數組作為模擬資料庫。在現實應用程式中,您可能會與資料庫互動來儲存和檢索任務。
測試API
您可以使用 Postman 或 cURL 等工具測試此 API。例如,要新增一個新任務:
curl -X POST -H "Content-Type: application/json" -d '{"title":"Learn REST","completed":false}' http://localhost/index.php
並取得任務清單:
curl -X GET http://localhost/index.php
這是一個非常基本的範例,旨在說明 PHP 中的 RESTful API 的概念。現實場景需要更強大的請求處理、錯誤管理以及身份驗證和輸入驗證等安全考慮。
- 縮寫: REST的