### 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 安全设计指南》