Lição: 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 deGerenciadorDeRede
. - A visualização
List
itera através do arrayposts
e exibe o título e o corpo de cada post. - O modificador
onAppear
chamabuscarPosts()
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!