一.REST(表述性狀態轉移)
1.定義
REST(Representational State Transfer)是由 Roy Fielding 在 2000 年提出的一種軟件架構風格,用于設計網絡應用的通信模式。它基于 HTTP 協議,強調通過統一的接口(如標準 HTTP 方法)管理資源,實現客戶端與服務器的解耦。
2.REST 的六大設計原則(約束)
(1)客戶端-服務器分離
客戶端處理用戶界面和交互,服務器負責數據存儲和業務邏輯。
資源導向:
資源:系統中可識別的實體(如用戶、訂單、文章),通過 URI(統一資源標識符)定位。
示例:
https://api.example.com/users/123 ?# 單個用戶資源
https://api.example.com/posts ?????# 文章集合資源
(2)統一接口(Uniform Interface)
資源通過 URI 標識,操作通過標準 HTTP 方法(GET、POST、PUT、DELETE)執行。
(3)無狀態(Stateless)
每個請求包含完整的上下文信息,服務器不存儲客戶端狀態。
優點:可擴展性強、易于緩存和負載均衡。
(4)可緩存(Cacheable)
響應需明確標識是否可緩存,減少重復請求。
(5)分層系統(Layered System)
客戶端無需知道直接連接的服務器以外的層級(如代理、網關)。
(6)按需代碼(Code-On-Demand,可選)
服務器可返回可執行代碼(如 JavaScript)擴展客戶端功能。
3.RESTful 定義
RESTful 是指符合 REST 架構風格的設計規范的應用或服務。
一個 API 或服務若遵循 REST 的六大約束,即可稱為 RESTful API。
4.REST vs. RESTful
REST:理論架構風格。
RESTful:符合 REST 原則的具體實現(如大多數現代 Web API)。
注意:嚴格遵循 REST 所有原則的 API 較少,常見的是 “REST 風格” 或 “準 RESTful” 實現。
5.狀態碼
6.服務器框架
Python:Flask、Django REST Framework。
Java:Spring Boot、JAX-RS。
Node.js:Express、NestJS。
Go:Gin、Echo。
二.RESTful vs. SOAP/RPC