Como Funcionam as Requisições HTTP no Swift? Entendendo URL, URLRequest e URLSession

# swift# http# ios
Como Funcionam as Requisições HTTP no Swift? Entendendo URL, URLRequest e URLSessionLacerda

Para fazer requisição em Swift é um processo simples, mas precisamos entender alguns pontos antes...

Para fazer requisição em Swift é um processo simples, mas precisamos entender alguns pontos antes para poder fazer sentido Todo o processo.

Para explicar, eu dividi em 3 partes. A primeira trata sobre o endereço do recurso que queremos acessar (url do backend/servidor ou arquivos locais), a segunda, sobre o objeto que detém os dados da requisição (verbo http, body, header), e a última sobre como de fato realizar a requisição.

  1. URL - Endereço de recurso;
  2. URLRequest - Dados da requisição;
  3. URLSession - Fazendo a requisição.

Antes de tudo, é preciso saber para onde a requisição deve ir, ou seja, qual é a url do backend. Vou Usar como exemplo a seguinte url: https://exemplo.com.br/auth/login

Então preciso fazer uma req para o backend chamando a rota de login.

Com essa informação, agora podemos criar o endereço do recurso que é a classe URL do swift. Veja o exemplo abaixo e troque o valor da url pela sua:

let url = URL(string: "https://exemplo.com.br/auth/login")!

Se o termo "endereço do recurso" parecer pouco familiar, pense na URL como o endereço de destino da requisição.

Com o endereço do recurso criado, agora devemos criar o objeto que contém os dados da requisição (URLRequest), ele recebe como parâmetro o que criamos anteriormente. Veja o exemplo abaixo:

var request = URLRequest(url: url)

Como dito anteriormente, esse objeto URLRequest nos permite definir o método HTTP, os headers e o corpo (body) da requisição. Veja abaixo como definir essas informações.

// Aqui definimos o verbo HTTP.
// Se não definirmos outro método, a requisição utiliza GET como método HTTP padrão.
request.httpMethod = "POST"

// Dizendo qual é o header da request        
request.setValue("application/json", forHTTPHeaderField: "Content-Type")

// LoginModel é uma struct que implementa Codable
// e possui os dados necessários para o login      
let login = LoginModel(email: email, password: password)

do {
    // Já aqui, vamos tentar criar um JSON a partir da struct acima.
    let jsonData = try JSONEncoder().encode(login)

    // Com o JSON criado, podemos adicionar no corpo da request o JSON criado.
    request.httpBody = jsonData
} catch {
    print("Erro ao criar JSON:", error.localizedDescription)
    return
}
Enter fullscreen mode Exit fullscreen mode

Fizemos todos esses passos, mas ainda falta o último que é de fato onde a requisição vai ser iniciada.

Com a URLRequest finalizada, agora podemos criar o objeto que é responsável pela execução da requisição. Esse é o URLSession. Veja o exemplo abaixo para implementar:

// Criado o objeto e passando o objeto request que criamos
let task = URLSession.shared.dataTask(with: request) { data, response, error in
// Aqui dentro, é possível saber o que o servidor respondeu
// Qual foi o status HTTP, os dados retornados, possíveis erros etc
}
// Até esse momento, apenas configuramos a requisição. É o resume() que inicia a execução da task.
task.resume()
Enter fullscreen mode Exit fullscreen mode

Com esses passos, você aprendeu como fazer uma requisição com Swift e o melhor, antes de só fazer, pode entender a base do funcionamento.