跳到主要内容

第4章 网络与API交互

在网络开发中,iOS应用需要与服务器进行数据交互,实现如获取数据、提交表单等操作。本章将详细介绍如何使用URLSessionAlamofire进行网络请求,并解析JSON数据,最终实现一个完整的RESTful API对接案例。


4.1 URL_Session网络请求

4.1.1 URL Session简介

URLSession 是 Apple 提供的用来处理网络请求的框架,支持 GET、POST、DELETE 等 HTTP 方法。

示例:GET 请求

let url = URL(string: "https://api.example.com/data")!
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
if let error = error {
print("Error: \(error)")
return
}
if let data = data {
// 处理返回的 data
print(String(data: data, encoding: .utf8))
}
}
task.resume()

示例:POST 请求

var request = URLRequest(url: URL(string: "https://api.example.com/post")!)
request.httpMethod = "POST"
request.httpBody = "name=John&age=30".data(using: .utf8)

let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
// 同样处理数据
}
task.resume()

4.2 JSON数据解析

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。iOS 使用 Codable 协议来解析 JSON 数据。

示例:解析 JSON 数据

struct User: Codable {
let name: String
let age: Int
}

let jsonString = """
{
"name": "John",
"age": 30
}
"""
let data = jsonString.data(using: .utf8)!

do {
let user = try JSONDecoder().decode(User.self, from: data)
print("Name: \(user.name), Age: \(user.age)")
} catch {
print("解析失败:\(error)")
}

4.3 Alamofire第三方库

Alamofire 是一个简化网络请求的第三方库,使用简便且功能强大。

4.3.1 安装与配置

在项目中使用 CocoaPods 或 Swift Package Manager 添加 Alamofire 依赖。

4.3.2 GET 请求示例

AF.request("https://api.example.com/data")
.validate()
.responseJSON { response in
if let value = response.value {
print("Response: \(value)")
}
}

4.3.3 POST 请求示例

let parameters: [String: Any] = [
"name": "John",
"age": 30
]

AF.request("https://api.example.com/post", method: .post, parameters: parameters)
.validate()
.responseJSON { response in
// 处理响应
}

4.3.4 文件上传与下载

上传文件

let fileURL = URL(fileURLWithPath: "/path/to/file.txt")
AF.upload(fileURL, to: "https://api.example.com/upload")
.response { response in
// 处理上传结果
}

下载文件

AF.download("https://api.example.com/download/file.txt") { (temporaryURL, response) in
// 处理下载后的临时文件
}
.resume()

4.4 RESTful API对接实战

4.4.1 API 设计原则

RESTful API 是基于 HTTP 标准设计的资源接口,常见 HTTP 方法包括:

  • GET:获取资源
  • POST:创建资源
  • PUT:更新资源
  • DELETE:删除资源

4.4.2 实战:用户登录与注册

用户登录接口

struct LoginRequest: Codable {
let username: String
let password: String
}

struct LoginResponse: Codable {
let token: String
}

let loginRequest = LoginRequest(username: "john", password: "123456")
let parameters = try? JSONEncoder().encode(loginRequest)

AF.request("https://api.example.com/login", method: .post, parameters: nil, encoding: JSONEncoding.default, headers: ["Content-Type": "application/json"])
.validate()
.responseDecodable(of: LoginResponse.self) { response in
if let loginResponse = response.value {
print("登录成功,Token: \(loginResponse.token)")
} else {
print("登录失败:\(response.error)")
}
}

用户注册接口

struct RegisterRequest: Codable {
let username: String
let password: String
}

let registerRequest = RegisterRequest(username: "john", password: "123456")
let parameters = try? JSONEncoder().encode(registerRequest)

AF.request("https://api.example.com/register", method: .post, parameters: nil, encoding: JSONEncoding.default, headers: ["Content-Type": "application/json"])
.validate()
.response { response in
if response.isSuccess {
print("注册成功")
} else {
print("注册失败:\(response.error)")
}
}

4.5 总结

本章详细介绍了如何使用 URLSessionAlamofire 进行网络请求,并解析 JSON 数据。通过 RESTful API 实战案例,读者可以掌握实际开发中网络交互的核心技能。后续章节将结合这些知识,完成一个完整的 iOS 应用开发。


下一章:第5章 数据存储与持久化