### 1.2 何時使用 GET 方法
Web 基礎設施嚴重依賴于GET 方法的冪等性和安全性。客戶端期望能夠重復發起 GET 請求, 而不必擔心造成副作用。緩存依賴于不需訪問源服務器便能提供已緩存表述的能力。
#### 問題描述
您想知道何時應該與何時不應該使用 GET 請求,以及 GET 請求使用不當的潛在后果。
#### 解決方案
使用GET 方法進行安全與冪等的信息獲取。
#### 問題討論
每個 HTTP 方法都具有特定的語義。正如 1.1 節所討論的,GET 的目的是得到一個資源的表述,PUT 用于建立或更新一個資源,DELETE 用于刪除一個資源,POST 用于創建多個新資源或對資源進行多種其他變更。
在所有上述方法中,GET 被濫用的情況最少,因為GET 既安全又冪等。
> 注意:不要把 GET 方法用于不安全或非冪等操作。
> 因為這樣做可能會造成永久性的、意想不到的、不符合需要的資源改變。
大部分對GET 的濫用都是將它用在不安全操作上,以下是一些例子:
~~~
# 將頁面存為書簽
GET /bookmarks/add_bookmark?href=http%3A%2F%2F www.example.org%2F2009%2F10%2F10%2Fnotes.html HTTP/1.1
Host: www.example.org
# 向購物車添加內容
GET /add_cart?pid=1234 HTTP/1.1 Host: www.example.org
# 發送消息
GET /messages/send?message=I%20am%20reading HTTP/1.1 Host: www.example.org
# 刪除便條
GET /notes/delete?id=1234 HTTP/1.1
Host: www.example.org
~~~
對于服務器來說,所有這些操作都是不安全和非冪等的。但對于那些基于HTTP 的軟件,這些操作都是安全和冪等的。這種差異的后果嚴重依賴于應用程序。例如,一個工具在服務器上通過定期提交一個GET 請求來執行健康檢查,如果使用上面第 4 個URI,則將刪除一條記錄。
如果這些操作必須要使用GET 方法,特別警惕以下幾點:
* ? 添加Cache-Control: no-cache 頭來確保響應不被緩存。
* ? 確保由此產生的任何副作用都是良性的,不會改變關鍵業務數據。
* ? 在服務器實現方面,將這些操作實現成可重復執行的(例如,冪等的)。
上述要點可以幫助減少某些錯誤的操作(不是全部)導致的后果,但最佳的措施是避免GET方法的濫用。
- 《Restful Web Service Cookbook》
- 簡介
- 推薦序
- 第 1 章 使用統一接口
- 1.1 如何保持交互的可見性
- 1.2 何時使用 GET 方法
- 1.3 何時使用 POST 方法
- 1.4 如何使用 POST 方法創建資源
- 目錄
- PHP RESTful
- 理解RESTful架構
- 深入淺出REST
- 表述性狀態轉移
- 無狀態
- 設計指南
- RESTful API 設計指南
- RESTful API 設計最佳實踐
- 測試工具
- soapUI
- 實例
- 豆瓣
- 應用
- 接口規范
- 視頻
- 《Restful API實戰》
- 課程目標
- 第1章 Restful是什么
- 1-1 restful簡介及資源介紹
- 第2章 為什么要使用Restful
- 2-1 Restful中HTTP協議介紹
- 2-2 架構區別
- 第3章 如何使用Restful
- 3-1 restful設計要素
- 3-2 DHC Client
- 3-3 本地開發環境搭建
- 3-4 確認設計要素
- 3-5 數據庫設計
- 3-6 用戶業務邏輯
- 3-7 文章業務邏輯
- 3-8 restfulApi設計要素
- 3-9 初始化運行參數
- 3-10 完善用戶API
- 3-11 完善文章API
- 文摘
- RESTful 接口實現簡明指南
- RESTful Web 服務教程
- 模型表示(Representations)
- 資源定位
- URI中的查詢參數
- 統一接口
- PUT 和 POST 的區別
- 基于 REST 的 Web 服務
- PHP Reatful
- Restful狀態響應碼
- 《REST API 安全設計指南》