简单来说,幂等性是指“无论请求执行多少次,对服务器资源状态的影响都是相同的”。
以下是 Swift 开发中常用的 HTTP 方法详细对比:
常用 HTTP 方法对比表
| 方法 | 语义 (Semantics) | 幂等性 | 安全性 | 常见 Swift 开发场景 |
|---|---|---|---|---|
| GET | 获取资源 | 是 | 是 | 拉取文章列表、查询用户信息 |
| POST | 创建新资源 | 否 | 否 | 提交表单、发表评论、上传新头像 |
| PUT | 替换/完整更新资源 | 是 | 否 | 更新个人资料(替换整条数据) |
| PATCH | 部分更新资源 | 否 | 否 | 仅修改用户昵称(不触动其他字段) |
| DELETE | 删除资源 | 是 | 否 | 注销账号、删除某条消息 |
| HEAD | 仅获取响应头 | 是 | 是 | 检查资源是否存在、检查文件大小 |
核心方法详解
1. GET - 获取数据
-
语义:请求指定的页面信息,并返回实体主体。它应该是“只读”的。
-
安全性与幂等性:它是安全的(不改变状态),也是幂等的(执行一次和一百次结果一致)。
-
Swift 场景:
Swift
// 获取 JSON 数据 let task = URLSession.shared.dataTask(with: url) { data, response, error in ... }
2. POST - 提交数据
-
语义:向指定资源提交数据进行处理(例如提交表单或上传文件)。数据包含在请求体中。
-
幂等性:不幂等。如果重复点击“提交订单”按钮发送了两次 POST 请求,服务器可能会创建两个重复的订单。
-
Swift 场景:
Swift
var request = URLRequest(url: url) request.httpMethod = "POST" request.httpBody = try? JSONEncoder().encode(newObject)
3. PUT vs PATCH - 更新数据
- PUT (全量更新) :要求客户端提供资源的完整版本。如果资源不存在,有时也可用于创建。它是幂等的,因为多次发送相同的完整数据,结果都是那一套数据。
- PATCH (增量更新) :仅提供需要修改的字段。它通常不幂等,例如一个 PATCH 请求的操作是
{"increment": 1},执行两次会导致数值增加 2。 - Swift 场景:修改用户设置或更新特定的数据库记录。
4. DELETE - 删除数据
- 语义:请求服务器删除指定的资源。
- 幂等性:它是幂等的。第一次删除成功后,资源消失;第二次删除虽然可能返回
404 Not Found,但服务器上“该资源已不存在”的状态没有改变。
为什么幂等性在 Swift 开发中很重要?
在移动端开发(如 iOS)中,网络环境往往不稳定。了解幂等性有助于你处理自动重试机制:
- 安全重试:对于
GET或PUT请求,如果遇到超时,网络框架可以安全地自动发起第二次请求,因为它们是幂等的,不会产生脏数据。 - 谨慎对待 POST:对于
POST请求,绝对不能在未确认的情况下自动重试。否则,用户可能会被扣款两次或收到两份重复的邮件。
进阶建议
在 Swift 中,建议将这些方法封装在 enum 中以减少硬编码错误:
Swift
enum HTTPMethod: String {
case get = "GET"
case post = "POST"
case put = "PUT"
case patch = "PATCH"
case delete = "DELETE"
}
// 使用方式
var request = URLRequest(url: url)
request.httpMethod = HTTPMethod.post.rawValue