2025年Swift API开发:REST、GraphQL、gRPC如何选择?

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Swift API:从理论到实际请求

\n\n

每位iOS开发者迟早都会遇到应用与服务器通信的需求。无论是加载新闻流、提交表单数据还是实时流媒体——都离不开API(应用程序编程接口)。但该选择哪种协议?经典的REST、灵活的GraphQL还是超高速的gRPC?

\n\n

本文不仅会列举优缺点。我们将通过实际示例深入讲解Swift API开发,展示代码并提供实用建议。您将学习如何正确构建网络层、使用哪些库以及每种方法何时是最佳选择。

\n\n

如果您正在使用Swift编写代码,并希望您的应用能够快速、可靠且优雅地与后端通信——本文正是为您准备的。开始吧!

\n\n

Swift中的REST API:永不过时的经典

\n\n

REST(表述性状态转移)是一种使用HTTP方法(GET、POST、PUT、DELETE)操作资源的架构风格。大多数公共API(GitHub、Twitter、Stripe)都基于REST构建。对于Swift开发者而言,这意味着您将使用JSON、URLSession或Alamofire。

\n\n

使用URLSession的基本GET请求

\n\n

从最简单的开始——获取数据。假设我们需要从JSONPlaceholder加载用户列表:

\n\n
import Foundation\n\nstruct User: Codable {\n    let id: Int\n    let name: String\n    let email: String\n}\n\nfunc fetchUsers() async throws -> [User] {\n    let url = URL(string: "https://jsonplaceholder.typicode.com/users")!\n    let (data, response) = try await URLSession.shared.data(from: url)\n    \n    guard let httpResponse = response as? HTTPURLResponse,\n          (200...299).contains(httpResponse.statusCode) else {\n        throw URLError(.badServerResponse)\n    }\n    \n    return try JSONDecoder().decode([User].self, from: data)\n}\n\nTask {\n    do {\n        let users = try await fetchUsers()\n        print("已加载 \\(users.count) 位用户")\n    } catch {\n        print("错误: \\(error.localizedDescription)")\n    }\n}
\n\n

请注意使用async/await——这是Swift中处理异步代码的现代方式。代码变得可读且简洁,无需闭包和回调。

\n\n

使用Alamofire的POST请求

\n\n

Alamofire是最流行的Swift网络请求库。它简化了错误处理、参数编码和文件上传。以下是发送数据的示例:

\n\n
import Alamofire\n\nstruct NewUser: Encodable {\n    let name: String\n    let email: String\n}\n\nAF.request("https://jsonplaceholder.typicode.com/users",\n           method: .post,\n           parameters: NewUser(name: "伊万", email: "ivan@example.com"),\n           encoder: JSONParameterEncoder.default)\n    .validate()\n    .responseDecodable(of: User.self) { response in\n        switch response.result {\n        case .success(let user):\n            print("已创建用户,id: \\(user.id)")\n        case .failure(let error):\n            print("错误: \\(error.localizedDescription)")\n        }\n    }
\n\n

提示:使用.validate()——它会自动检查状态码并将HTTP错误转换为Alamofire错误。您的代码会更简洁,调试也更简单。

\n\n

何时REST是最佳选择?

\n
    \n
  • 您有简单的CRUD应用(笔记、任务列表)。
  • \n
  • API提供固定的端点。
  • \n
  • 您不需要复杂的数据嵌套。
  • \n
\n\n

Swift中的GraphQL:灵活的查询

\n\n

GraphQL是一种查询语言,允许客户端精确请求所需的数据。没有过度获取(多余字段)或获取不足(需要多次请求)。对于Swift,有出色的库Apollo iOS

博客

书籍推荐