Cliente HTTP para Swift (iOS/macOS): mejores bibliotecas para trabajar con la red
Al desarrollar aplicaciones para iOS y macOS, trabajar con solicitudes de red es una de las tareas clave. Swift ofrece tanto herramientas integradas como potentes bibliotecas de terceros. En este artículo, revisaremos los mejores clientes HTTP para Swift, sus características, ejemplos de uso y escenarios en los que cada uno será más efectivo.
1. URLSession — la herramienta estándar de Apple
URLSession es el framework integrado en Foundation para realizar solicitudes de red. Está disponible en todas las plataformas de Apple, no requiere instalar dependencias adicionales y es ideal para proyectos simples.
Ventajas:
- Integración completa con el ecosistema de Apple (sesiones en segundo plano, soporte para URLSessionWebSocketTask).
- Sin sobrecarga adicional — no es necesario conectar bibliotecas externas.
- Soporte para async/await desde Swift 5.5.
Ejemplo de código con async/await (iOS 15+):
import Foundation
func fetchData() async throws -> Data { let url = URL(string: "https://api.example.com/data")! let (data, response) = try await URLSession.shared.data(from: url) guard let httpResponse = response as? HTTPURLResponse, (200...299).contains(httpResponse.statusCode) else { throw URLError(.badServerResponse) } return data}2. Alamofire — el estándar de facto para solicitudes de red
Alamofire es la biblioteca de terceros más popular para clientes HTTP en Swift. Está construida sobre URLSession y proporciona una API declarativa conveniente, manejo automático de errores, soporte para codificación de parámetros y mucho más.
Características clave:
- Cadenas de solicitudes y respuestas.
- Conversión automática de JSON mediante Codable.
- Soporte para carga/descarga de archivos con progreso.
- Monitor de red integrado (Network Reachability).
Ejemplo de una solicitud GET simple:
import Alamofire
AF.request("https://jsonplaceholder.typicode.com/posts/1") .responseDecodable(of: Post.self) { response in switch response.result { case .success(let post): print(post.title) case .failure(let error): print(error.localizedDescription) } }3. Moya — abstracción sobre Alamofire para código limpio
Moya es una capa sobre Alamofire que ofrece una tipificación estricta de los endpoints de API mediante enumeraciones (enums). Esto permite evitar cadenas mágicas y facilita las pruebas.
Características:
- Cada endpoint es un case separado en un enum.
- Soporte integrado para stubs (simulaciones) en pruebas.
- Integración con RxSwift y Combine.
Ejemplo de declaración de un proveedor:
import Moya
enum GitHubAPI { case userRepos(username: String) case repoDetails(owner: String, repo: String)}
extension GitHubAPI: TargetType { var baseURL: URL { URL(string: "https://api.github.com")! } var path: String { switch self { case .userRepos(let username): return "/users/\\(username)/repos" case .repoDetails(let owner, let repo): return "/repos/\\(owner)/\\(repo)" } } var method: Moya.Method { .get } var task: Task { .requestPlain } var headers: [String: String]? { ["Accept": "application/vnd.github.v3+json"] }}4. Kitura-Net — cliente HTTP de IBM para Swift del lado del servidor
Kitura-Net es parte del ecosistema Kitura, orientado al desarrollo de servidores en Swift. Sin embargo, también se puede usar en aplicaciones cliente para macOS. Se distingue por su asincronía basada en eventos y su mínimo consumo de memoria.
Cuándo elegirlo:
- Para servidores