Cliente HTTP em Swift: fazendo requisições corretamente

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

Introdução: por que requisições HTTP corretas são a base de qualquer aplicação



No desenvolvimento mobile e desktop moderno com Swift, raramente se encontra uma aplicação que funciona completamente offline. Praticamente qualquer aplicativo iOS ou macOS interage com servidores remotos: carrega dados, envia formulários, sincroniza conteúdo. O cliente HTTP é um componente chave, do qual dependem não apenas a velocidade, mas também a segurança e a estabilidade de toda a aplicação.



Neste artigo, vamos analisar como criar um cliente HTTP robusto em Swift usando o framework nativo Foundation. Você aprenderá como configurar corretamente o URLSession, tratar erros, trabalhar com JSON e usar abordagens modernas como async/await. O material será útil tanto para iniciantes que estão aprendendo Swift quanto para desenvolvedores experientes que desejam sistematizar seus conhecimentos.



1. Fundamentos do URLSession: a base da comunicação em rede



Em Swift, a principal ferramenta para trabalhar com HTTP é a classe URLSession. Ela faz parte do framework Foundation e fornece uma API flexível para enviar requisições e receber respostas. O URLSession suporta várias configurações, permitindo adaptar o comportamento para tarefas específicas.



Criação e configuração da sessão



O primeiro passo é criar uma instância de URLSession com uma configuração específica. Existem três tipos de configurações:



  • .default — configuração padrão com cache e armazenamento de cookies;
  • .ephemeral — sem armazenamento de dados em disco (cookies, cache mantidos apenas na memória);
  • .background — para tarefas em segundo plano que podem ser executadas mesmo após o fechamento do aplicativo.


Exemplo de criação de sessão com configuração personalizada:



let configuration = URLSessionConfiguration.defaultconfiguration.timeoutIntervalForRequest = 30configuration.waitsForConnectivity = true

let session = URLSession(configuration: configuration)


Observe o parâmetro waitsForConnectivity: se definido como true, a requisição não falhará com erro na ausência de rede, mas aguardará a reconexão. Isso é especialmente importante para aplicativos móveis.



Requisição GET básica



A maneira mais simples de executar uma requisição é usar o método dataTask(with:). Aqui está um exemplo mínimo:



guard let url = URL(string: "https://api.example.com/users") else { return }

let task = session.dataTask(with: url) { data, response, error in if let error = error { print("Erro na requisição: \\(error.localizedDescription)") return } guard let httpResponse = response as? HTTPURLResponse, (200...299).contains(httpResponse.statusCode) else { print("Resposta do servidor inválida") return } guard let data = data else { print("Nenhum dado na resposta") return } // Processamento dos dados print("Recebidos \\(data.count) bytes")}task.resume()


Ponto importante: não se esqueça de chamar resume(), caso contrário a requisição não será iniciada. Este é um dos erros mais comuns de iniciantes.



2. Trabalhando com JSON: dos dados aos objetos



A maioria das APIs modernas retorna dados no formato JSON. Em Swift, para trabalhar com JSON, usa-se o protocolo Codable, que combina Encodable e Decodable. Isso permite converter facilmente dados em modelos e vice-versa.



Criação do modelo e decodificação



Suponha que o servidor retorne uma lista de usuários neste formato:



[    {        "id": 1,        "name": "Иван Петров",        "email": "ivan@example.com"    }]


Vamos criar a estrutura correspondente:



struct User: Coda                

Blogs

Book Recommendations