SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
23.11.2024

Aula 117: Integrando APIs RESTful em SwiftUI

Nesta aula, vamos explorar como integrar APIs RESTful em uma aplicação SwiftUI. Vamos abordar os conceitos básicos de como fazer requisições de rede, decodificar dados em JSON e exibir os resultados em uma visualização SwiftUI.

Configurando o Projeto

Para começar, crie um novo projeto SwiftUI no Xcode. Você pode nomeá-lo como ExemploAPIRestful.

Entendendo APIs RESTful

APIs RESTful permitem que clientes se comuniquem com servidores via HTTP. Elas normalmente fornecem dados em um formato estruturado como JSON. Vamos buscar dados de uma API de exemplo, https://jsonplaceholder.typicode.com, que oferece serviços REST simulados online.

Criando um Modelo de Dados

Primeiro, precisamos definir um modelo que corresponda à estrutura JSON dos dados que queremos buscar. Suponha que estamos buscando uma lista de posts. Um post típico pode ter um ID, título e corpo.

import Foundation

struct Post: Identifiable, Codable {
    var id: Int
    var title: String
    var body: String
}

Aqui, conformamos o modelo a Identifiable para fácil utilização em listas SwiftUI e a Codable para decodificar a resposta JSON.

Camada de Rede

Em seguida, vamos implementar uma camada de rede simples para buscar os posts da API. Criaremos uma classe GerenciadorDeRede que gerencia as requisições da API.

import Foundation
import Combine

class GerenciadorDeRede: ObservableObject {
    @Published var posts: [Post] = []
    var cancellables = Set<AnyCancellable>()

    func buscarPosts() {
        guard let url = URL(string: "https://jsonplaceholder.typicode.com/posts") else { return }

        URLSession.shared.dataTaskPublisher(for: url)
            .map { $0.data }
            .decode(type: [Post].self, decoder: JSONDecoder())
            .replaceError(with: [])
            .receive(on: DispatchQueue.main)
            .assign(to: &$posts)
    }
}
  • Usamos URLSession para realizar a requisição de rede.
  • O dataTaskPublisher retorna um publicador que emite dados e resposta.
  • Decodificamos a resposta JSON para nosso modelo Post.
  • O resultado é publicado na visualização SwiftUI usando @Published.

Visualização SwiftUI

Agora, vamos criar uma Visualização SwiftUI que exibirá a lista de posts. Usaremos a visualização List para mostrar cada post.

import SwiftUI

struct ContentView: View {
    @StateObject var gerenciadorDeRede = GerenciadorDeRede()

    var body: some View {
        NavigationView {
            List(gerenciadorDeRede.posts) { post in
                VStack(alignment: .leading) {
                    Text(post.title)
                        .font(.headline)
                    Text(post.body)
                        .font(.subheadline)
                }
            }
            .navigationTitle("Posts")
            .onAppear {
                gerenciadorDeRede.buscarPosts()
            }
        }
    }
}

Explicação:

  • Usamos @StateObject para criar uma instância de GerenciadorDeRede.
  • A visualização List itera através do array posts e exibe o título e o corpo de cada post.
  • O modificador onAppear chama buscarPosts() quando a visualização aparece, acionando o carregamento dos dados.

Executando o Aplicativo

Com o código acima, execute o aplicativo no simulador ou em um dispositivo físico. Você deve ver uma lista de posts buscados da API.

Conclusão

Nesta aula, aprendemos como integrar APIs RESTful em aplicações SwiftUI. Ao criar um modelo de dados simples, uma camada de rede e uma visualização SwiftUI, conseguimos buscar e exibir dados de um servidor remoto com sucesso. Este conceito fundamental pode ser expandido com tratamento de erros, paginação e cenários de rede mais complexos em aulas futuras. Boa codificação!

Video

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

Thank you for voting!