API 的全名是 Application Programming Interface,中文翻譯為「應用程式介面」,簡單來說就是一個介面,讓不同的程式可以互相溝通。
而 RESTful API 是一種 API 的設計風格,REST 的全名是 Representational State Transfer,中文翻譯為「具象狀態轉移」。
RESTful API 的特色
-
無狀態性 (Stateless):每個請求都應該包含處理該請求所需的所有資訊,伺服器不會儲存任何客戶端的狀態資訊。
-
統一介面 (Uniform Interface):所有的資源都透過相同的介面進行操作,主要包含:
- 資源識別:透過 URI 來識別資源
- 資源操作:透過 HTTP 方法來操作資源
- 自我描述的訊息:每個訊息都包含如何處理該訊息的足夠資訊
- 超媒體作為應用程式狀態的引擎
-
客戶端-伺服器架構 (Client-Server):將使用者介面與資料儲存分離,提高了系統的可移植性。
HTTP 方法與 CRUD 操作的對應
| HTTP 方法 | CRUD 操作 | 說明 |
|---|---|---|
| GET | Read | 取得資源 |
| POST | Create | 建立資源 |
| PUT | Update | 更新整個資源 |
| PATCH | Update | 部分更新資源 |
| DELETE | Delete | 刪除資源 |
RESTful API 的 URL 設計原則
-
使用名詞而非動詞
- 好:
GET /users/123 - 壞:
GET /getUser/123
- 好:
-
使用複數名詞
- 好:
GET /users - 壞:
GET /user
- 好:
-
使用階層結構表示資源關係
GET /users/123/posts- 取得用戶 123 的所有文章GET /users/123/posts/456- 取得用戶 123 的文章 456
-
使用查詢參數進行過濾、排序和分頁
GET /users?age=25&sort=name&page=2
HTTP 狀態碼
RESTful API 應該回傳適當的 HTTP 狀態碼:
-
2xx 成功
- 200 OK:請求成功
- 201 Created:資源已建立
- 204 No Content:請求成功但沒有回傳內容
-
4xx 客戶端錯誤
- 400 Bad Request:請求格式錯誤
- 401 Unauthorized:未授權
- 404 Not Found:資源不存在
-
5xx 伺服器錯誤
- 500 Internal Server Error:伺服器內部錯誤