前言
? ? ? ? 今天和我一組的小伙伴,在對接一個接口時,客戶將DELETED請求設置了body參數,導致一個功能反復搞了半天,今天就來說下這兩者的區別
1.HTTP概述
????????HTTP(HyperText Transfer Protocol)是一種用于從WWW(萬維網)服務器傳輸超文本到本地瀏覽器的傳輸協議。它使得瀏覽器可以更加高效地工作,同時減少網絡傳輸量。HTTP采用了請求/響應模型,客戶端向服務器發送一個請求,服務器返回相應的響應。這種通信過程包括以下幾個關鍵環節:
- 請求消息(Request Message):由請求行、請求頭、空行和消息體組成。請求行包括HTTP方法、URL和HTTP版本。
- 響應消息(Response Message):由狀態行、響應頭、空行和響應體組成。狀態行包括HTTP版本、狀態碼和原因短語。
常見的HTTP方法包括:
- GET:用于請求資源
- POST:用于提交數據
- PUT:用于更新資源
- DELETE:用于刪除資源
????????HTTP是無狀態的協議,即每個請求都是獨立的,服務器不會保存任何請求的狀態信息。
2. RESTful概述
????????RESTful(Representational State Transfer)是一種軟件架構風格,主要用于設計網絡應用的API。它基于以下幾個原則:
- 資源(Resources):RESTful以資源為中心,資源通過URI(統一資源標識符)進行標識。
- 統一接口(Uniform Interface):RESTful API通過一組標準的HTTP方法(GET、POST、PUT、DELETE)對資源進行操作。
- 無狀態(Stateless):每個請求都包含了處理該請求所需的全部信息,服務器不會在請求之間保存任何狀態。
- 緩存(Cacheable):響應應該明確標記為可緩存或不可緩存,以提高客戶端的效率。
????????RESTful設計風格使得API更具一致性和可維護性,同時利用HTTP協議的標準特性來簡化網絡應用的開發。
3.HTTP與RESTful的主要區別
-
URL表達形式不同:
- HTTP接口的URL表達形式可以不遵循任何標準格式。
- RESTful調用的URL必須遵循REST架構風格的規范,通常包括資源路徑。
-
請求方法不同:
- HTTP接口調用可以使用GET、POST、PUT、DELETE等HTTP請求方法。
- RESTful調用嚴格遵循標準的HTTP方法,并且這些方法具有特定的語義。
-
數據傳輸格式不同:
- HTTP接口調用可以使用任意數據格式,如form、json、xml等。
- RESTful調用通常使用JSON或XML數據格式進行數據傳輸,強調數據的自描述性。
-
資源定義不同:
- HTTP接口調用不一定需要資源的具體定義。
- RESTful調用要求在URL中明確定義資源,每個資源都有一個唯一的標識符URI。
4.詳細對比分析
4.1請求方法
????????HTTP接口調用可以使用各種HTTP方法,而RESTful嚴格限定了方法的使用場景。例如,GET方法僅用于獲取資源,POST方法用于創建資源,PUT方法用于更新資源,DELETE方法用于刪除資源。這種規范化的設計提高了API的清晰度和一致性。
????????需要特別指出的是,在標準的請求中,GET和DELETE方法是不能往body里面傳參數的。這是因為GET方法主要用于請求資源,而不是發送數據,DELETE方法用于刪除資源,因此也不需要在body中傳遞參數。
4.2 數據傳輸格式
????????HTTP接口調用的數據格式可以是form、json、xml等多種形式,而RESTful更傾向于使用JSON或XML。這種統一的數據格式使得客戶端和服務器之間的數據交換更為一致和高效。
4.3 資源定義
????????HTTP接口調用不依賴于具體的資源定義,而RESTful強調資源和API請求的對應關系。每個資源在RESTful API中都有一個唯一的URI,通過標準的HTTP方法對這些資源進行操作,使得API設計更加直觀和結構化。
5. 其他特點
5.1?資源標準化
????????RESTful是基于HTTP協議的,HTTP協議定義的URL必須符合URI(Uniform Resource Identifier)標準。URI由協議、主機、資源路徑、查詢字符串和片段組成。因此,RESTful要求每個資源都有一個唯一的標識符URI,這使得資源的管理更加標準化和系統化。
5.2 無狀態
????????因為HTTP是一種無狀態協議,所以RESTful也是無狀態的。即服務器不會保存任何客戶端請求的歷史信息。每個請求都是獨立的,服務器不會在請求之間保留會話狀態。這種無狀態性簡化了服務器的設計,同時也增強了系統的可擴展性和可靠性。
5.3 緩存機制
????????由于RESTful是基于HTTP標準定義的,因此具有HTTP緩存機制。客戶端可以在收到數據后將其存儲在本地緩存中,在下一次請求相同資源時可以減少網絡傳輸,提高性能。這種緩存機制可以顯著提高應用的響應速度和用戶體驗。
5.4 GET和DELETE請求的限制
????????在標準的HTTP請求中,GET和DELETE方法是不能往body里面傳參數的。GET方法主要用于請求資源,而不是發送數據,DELETE方法用于刪除資源,因此這兩種方法都不需要在body中傳遞參數。GET請求的參數通常附加在URL中,而DELETE請求通常只需要URI來標識需要刪除的資源。那么有標準就有魔改,有些依賴包就會提供,但是這是一個不好的習慣,還是建議大家你不要這么玩
6. 總結
????????RESTful是HTTP接口調用的一種特殊實現,遵循REST架構風格的規范,能夠提供更加標準化、統一化、可讀性和易用性的API設計。與傳統的HTTP接口調用相比,RESTful調用具有更加清晰明了、易于理解和維護的API設計,擴展性和靈活性也更強。在現代Web應用開發中,理解和使用RESTful架構風格能夠大大提高開發效率和應用的可維護性。
????????通過本文的介紹,希望讀者能夠清楚地理解HTTP和RESTful的基本概念及其主要區別,為今后的Web應用開發提供有力的支持。