GraphQL API com Swift: tutorial passo a passo
GraphQL está se tornando um padrão para APIs modernas devido à sua flexibilidade e eficiência. Ao contrário do REST, onde você recebe uma estrutura de dados fixa, o GraphQL permite solicitar apenas o que é necessário. Neste tutorial, vamos abordar como integrar a API GraphQL em aplicativos Swift para iOS e macOS, usando a biblioteca Apollo iOS. Você aprenderá a executar consultas, mutações e lidar com erros.
1. Configuração do projeto e instalação do Apollo iOS
O primeiro passo é criar um novo projeto Xcode e adicionar a dependência Apollo iOS via Swift Package Manager (SPM).
Passo 1.1: Criação do projeto
Abra o Xcode e crie um novo projeto (iOS App ou macOS App). Escolha SwiftUI ou UIKit — nosso exemplo funcionará com ambas as plataformas.
Passo 1.2: Instalação do Apollo iOS via SPM
- No Xcode, vá para
File → Add Packages... - Cole a URL do repositório:
https://github.com/apollographql/apollo-ios.git - Selecione a versão estável mais recente (por exemplo, 1.15.0) e clique em Add Package.
- Na janela que aparecer, selecione seu projeto e adicione o pacote Apollo.
Passo 1.3: Geração do esquema e do código
O Apollo iOS usa geração de código baseada no esquema GraphQL. Primeiro, baixe o esquema da sua API (geralmente via introspection query). Para teste, usaremos a API pública Countries GraphQL (https://countries.trevorblades.com).
Crie um arquivo schema.graphqls na raiz do projeto e coloque o esquema nele (pode ser obtido via GraphQL Playground). Em seguida, adicione o script de geração em Build Phases:
// Exemplo de script em Build Phasesif which apollo-ios-cli >/dev/null; then apollo-ios-cli generateelse echo "Apollo CLI não está instalado. Instale via: brew install apollo-ios-cli"fiInstale a CLI via Homebrew: brew install apollo-ios-cli.
2. Executando uma consulta GraphQL básica
Agora que o projeto está configurado, vamos escrever o código para executar uma consulta. Iremos obter uma lista de países com seus códigos e nomes.
Passo 2.1: Criação da consulta GraphQL
Na pasta do projeto, crie um arquivo Countries.graphql e adicione a consulta:
query GetCountries { countries { code name }}Depois disso, execute a geração de código (via Build ou terminal). O Apollo criará as estruturas GetCountriesQuery e GetCountriesQuery.Data.
Passo 2.2: Configuração do ApolloClient
Crie um gerenciador de rede:
import Apollo
class NetworkManager { static let shared = NetworkManager() private(set) lazy var apollo: ApolloClient = { let url = URL(string: "https://countries.trevorblades.com")! return ApolloClient(url: url) }()}Passo 2.3: Executando a consulta em SwiftUI
Exemplo para SwiftUI:
import SwiftUI
struct ContentView: View { @State private var countries: [GetCountriesQuery.Data.Country] = [] var body: some View { List(countries, id: \\.code) { country in Text("\\(country.name) (\\(country.code))") } .onAppear { loadCountries() } } func loadCountries() { NetworkManager.shared.apollo.fetch(query: GetCountriesQuery()) { result in switch result { case .success(let graphQLResult): if let countries = graphQLResult.data?.countries { self.countries = countries } case .failure(let error): print("Erro na consulta: \\(error.localizedDescription)") } } }}Execute o aplicativo. Se tudo estiver correto, você verá a lista de países.