Cliente HTTP para Swift (iOS/macOS): melhores bibliotecas para trabalhar com rede

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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

Recommendations