Cliente HTTP para Swift (iOS/macOS): melhores bibliotecas para trabalhar com rede
Ao desenvolver aplicativos para iOS e macOS, trabalhar com requisições de rede é uma das tarefas principais. O Swift oferece tanto ferramentas integradas quanto poderosas bibliotecas de terceiros. Neste artigo, veremos os melhores clientes HTTP para Swift, suas características, exemplos de uso e cenários em que cada um será mais eficaz.
1. URLSession — ferramenta padrão da Apple
URLSession é um framework integrado ao Foundation para executar requisições de rede. Está disponível em todas as plataformas Apple, não requer instalação de dependências adicionais e é ideal para projetos simples.
Vantagens:
- Integração completa com o ecossistema Apple (sessões em segundo plano, suporte a URLSessionWebSocketTask).
- Overhead zero — não é necessário conectar bibliotecas externas.
- Suporte a async/await a partir do Swift 5.5.
Exemplo de código com 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 — padrão de facto para requisições de rede
Alamofire é a biblioteca de terceiros mais popular para clientes HTTP em Swift. Ela é construída sobre o URLSession e oferece uma API declarativa conveniente, tratamento automático de erros, suporte a codificação de parâmetros e muito mais.
Principais recursos:
- Encadeamento de requisições e respostas.
- Conversão automática de JSON via Codable.
- Suporte a upload/download de arquivos com progresso.
- Firewall de rede integrado (Network Reachability).
Exemplo de requisição GET simples:
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 — abstração sobre Alamofire para código limpo
Moya é uma camada sobre o Alamofire que oferece tipagem estrita de endpoints de API através de enumerações (enums). Isso evita strings mágicas e simplifica os testes.
Características:
- Cada endpoint é um case separado no enum.
- Suporte integrado a stubs para testes.
- Integração com RxSwift e Combine.
Exemplo de declaração de provedor:
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 da IBM para Swift no servidor
Kitura-Net faz parte do ecossistema Kitura, voltado para desenvolvimento server-side em Swift. No entanto, também pode ser usado em aplicativos cliente para macOS. Destaca-se pela assincronicidade baseada em eventos e consumo mínimo de memória.
Quando escolher:
- Para server-side