SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
16.11.2024

Lição: 48: Fundamentos de Networking com URLSession

No desenvolvimento moderno para iOS, gerenciar tarefas de rede de forma eficiente é crucial para a construção de aplicações responsivas. Um dos frameworks mais utilizados para realizar requisições de rede em Swift é o URLSession. Esta aula abordará os fundamentos de networking com URLSession, incluindo como realizar requisições simples GET e POST, lidar com respostas e trabalhar com dados JSON.

Introdução ao URLSession

URLSession fornece uma API para baixar e enviar dados para e de um servidor. Ele abstrai as complexidades das conexões de rede, permitindo que os desenvolvedores se concentrem na construção de recursos em vez de gerenciar os detalhes das requisições HTTP.

Criando uma Instância de URLSession

Para começar com networking, você primeiro precisa criar uma instância de URLSession. Você pode criá-la usando a configuração padrão.

import Foundation

let session = URLSession.shared

Fazendo uma Requisição GET

Vamos começar com uma requisição GET simples. Vamos buscar dados de uma API pública que retorna dados em JSON.

Exemplo: Buscando Dados JSON

import Foundation

// Definindo a URL do recurso
let url = URL(string: "https://jsonplaceholder.typicode.com/posts/1")!

// Criando uma tarefa de dados
let task = URLSession.shared.dataTask(with: url) { data, response, error in

    // Verificando erros
    if let error = error {
        print("Erro ao buscar dados: \(error)")
        return
    }

    // Verificando resposta e dados válidos
    guard let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200,
          let data = data else {
        print("Resposta ou dados inválidos")
        return
    }

    // Fazendo o parsing dos dados JSON
    do {
        let json = try JSONSerialization.jsonObject(with: data, options: [])
        print("Dados JSON encontrados: \(json)")
    } catch {
        print("Erro ao fazer o parsing de JSON: \(error)")
    }
}

// Iniciando a tarefa
task.resume()

Explicação

  1. URL: Definimos a URL do recurso que queremos buscar. Neste caso, ela aponta para um exemplo de placeholder JSON.
  2. Tarefa de Dados: Criamos uma tarefa de dados usando URLSession.shared.dataTask(with:completionHandler:).
  3. Closure de Conclusão: Esta closure é chamada quando a tarefa de dados é concluída. Ela fornece os dados, a resposta e qualquer erro que tenha ocorrido.
  4. Tratamento de Erros: Verificamos por erros e validamos a resposta.
  5. Parsing de JSON: Usamos JSONSerialization para converter os dados em um objeto Swift (neste caso, um dicionário ou array).

Fazendo uma Requisição POST

Agora vamos criar uma requisição POST para enviar dados para um servidor.

Exemplo: Enviando Dados JSON

import Foundation

// Definindo a URL do recurso
let url = URL(string: "https://jsonplaceholder.typicode.com/posts")!

// Criando o URLRequest
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")

// Criando o payload JSON
let json: [String: Any] = [
    "title": "foo",
    "body": "bar",
    "userId": 1
]

do {
    request.httpBody = try JSONSerialization.data(withJSONObject: json, options: [])
} catch {
    print("Erro ao criar dados JSON: \(error)")
    return
}

// Criando uma tarefa de dados
let task = URLSession.shared.dataTask(with: request) { data, response, error in

    // Verificando erros
    if let error = error {
        print("Erro ao enviar dados: \(error)")
        return
    }

    // Verificando resposta válida
    guard let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 201,
          let data = data else {
        print("Resposta ou dados inválidos")
        return
    }

    // Fazendo o parsing da resposta JSON
    do {
        let jsonResponse = try JSONSerialization.jsonObject(with: data, options: [])
        print("Resposta JSON: \(jsonResponse)")
    } catch {
        print("Erro ao fazer o parsing da resposta JSON: \(error)")
    }
}

// Iniciando a tarefa
task.resume()

Explicação

  1. URLRequest: Criamos uma instância de URLRequest e definimos seu método HTTP como "POST".
  2. Cabeçalhos: Definimos o cabeçalho "Content-Type" como "application/json".
  3. Criando o Payload JSON: Preparamos um dicionário que representa os dados que estamos enviando e o convertimos para o formato JSON.
  4. Tratamento de Erros: Novamente, tratamos quaisquer erros que possam ocorrer durante a requisição ou o parsing dos dados.

Conclusão

Esta aula apresentou os fundamentos de networking em iOS usando URLSession. Você aprendeu a realizar requisições GET e POST, manejar respostas e trabalhar com dados JSON. Dominar o networking permitirá que você crie aplicações mais dinâmicas e responsivas que podem se comunicar com serviços externos.

Nas próximas aulas, podemos explorar tópicos mais avançados, como lidar com autenticação, trabalhar com URLSessionConfiguration e usar Combine ou async/await para tarefas de rede. Boa codificação!

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!