HTTP 請求方法指南:GET, POST, PUT, PATCH, DELETE 區別

Web 開發中,開發者每天都在與 API 打交道:用 GET 獲取文章列表,用 POST 創建一個新用户… 但在這些常見操作的背後,每種 HTTP 方法都有其精確的語義和不可替代的場景。理解它們的差異是設計出優雅、可預測的 RESTful 服務的基石。本文將詳細闡述這五種方法的用途、冪等性差異以及它們在實際開發中的應用。

以下是這五種方法的詳細説明和區別:

基本定義

  • GET: 用於從服務器檢索信息。GET 請求應該是安全且冪等的,這意味着它只用於獲取數據,不應改變服務器上的資源狀態。 多次相同的 GET 請求應該返回相同的結果。
  • POST: 用於向服務器提交數據,通常用於創建新資源。 POST 請求不是冪等的,連續發送相同的 POST 請求會創建多個新資源。
  • DELETE: 用於刪除服務器上的指定資源。 DELETE 請求是冪等的,即多次刪除同一個資源的效果與一次刪除相同。
  • PUT: 用於創建或完全替換服務器上的資源。 PUT 請求是冪等的,多次發送相同的 PUT 請求將產生相同的結果。
  • PATCH: 用於對資源進行部分修改。 PATCH 請求不是冪等的,其效果取決於資源的當前狀態。

核心區別:PUT vs POST

PUT 和 POST 都可以用來創建或更新資源,但它們之間存在關鍵差異:

特性

PUT

POST

主要用途

替換或創建指定 URI 的資源

創建一個新資源

冪等性

是冪等的。 多次發送同一個 PUT 請求,服務器上的資源狀態將保持一致。

不是冪等的。 多次發送同一個 POST 請求,會創建多個資源。

URI 的作用

URI 直接指向要修改或創建的那個資源。

URI 通常指向一個資源集合,服務器會為新創建的資源分配一個新的 URI。

請求體

包含資源的完整表述,用於替換整個資源。

包含要創建的新資源的數據。

簡單類比:

  • PUT: 就像更新一個人的完整個人資料。無論提交多少次更新後的完整資料,這個人的最終資料都是最後一次提交的內容。
  • POST: 就像在論壇上發帖子。每提交一次,就會多一個新帖子,即使內容完全一樣。

核心區別:PUT vs PATCH

PUT 和 PATCH 都可以用來更新資源,但更新的方式不同:

特性

PUT

PATCH

更新方式

整體替換。 請求體中需要包含資源的完整數據。如果某個字段沒有在請求中提供,那麼該字段可能會被清空或設為默認值。

局部更新。 請求體中只需要包含需要修改的字段。未包含的字段將保持不變。

效率

對於只修改少量信息的場景,發送整個資源數據會比較低效。

只傳輸需要修改的數據,更加高效,節省帶寬。

冪等性

是冪等的。

不一定是冪等的。 例如,一個 PATCH 請求是“將某個數值加 1”,那麼多次請求的結果就不同。

簡單類比:

  • PUT: 假設一個用户有姓名和郵箱兩個字段。如果只想更新郵箱,使用 PUT 請求時必須同時提供姓名和新的郵箱。
  • PATCH: 在同樣的情況下,使用 PATCH 請求只需要提供新的郵箱地址即可,姓名部分不受影響。

總結表格

方法

主要操作

是否冪等 (Idempotent)

是否安全 (Safe)

GET

查詢/讀取資源



POST

創建資源



DELETE

刪除資源



PUT

替換/完整更新資源



PATCH

部分更新資源



冪等性 (Idempotency): 多次執行相同的操作,其結果與執行一次完全相同。
安全性 (Safety): 操作不會改變服務器上資源的狀態。