Introdução: por que GraphQL e Swift são a combinação perfeita
O desenvolvimento iOS moderno é impensável sem uma interação eficiente com o servidor. A API REST está gradualmente dando lugar a uma tecnologia mais flexível e performática — o GraphQL. Neste tutorial, vamos abordar como integrar a API GraphQL em um aplicativo Swift na prática, usando a biblioteca Apollo iOS.
O GraphQL permite solicitar exatamente os dados necessários — nem mais, nem menos. Para o Swift, isso significa redução de tráfego, aceleração do funcionamento e simplificação do código. Vamos percorrer o caminho completo: desde a configuração do projeto até a execução de consultas e mutações complexas.
1. Configuração do projeto e instalação do Apollo iOS
O primeiro passo é preparar o projeto Xcode e instalar as dependências. A maneira mais conveniente é através do Swift Package Manager.
1.1 Criando um novo projeto
Abra o Xcode e crie um novo projeto (iOS App ou macOS App). Escolha SwiftUI ou UIKit — não é essencial. Vamos chamá-lo de GraphQLDemo.
1.2 Adicionando Apollo iOS via SPM
- No Xcode, vá em: File → Add Package Dependencies...
- Cole a URL do repositório:
https://github.com/apollographql/apollo-ios.git - Selecione a versão estável mais recente e clique em Add Package.
- Certifique-se de que o pacote foi adicionado ao target do seu aplicativo.
1.3 Geração do código do schema
O Apollo iOS usa geração de código. Para isso, precisamos de um arquivo de schema .graphqls (geralmente baixado do servidor) e arquivos de consulta .graphql.
// Estrutura do projeto:// GraphQLDemo/// ├── GraphQL/// │ ├── schema.graphqls // Schema do servidor// │ ├── Queries.graphql // Consultas// │ └── Mutations.graphql // MutaçõesApós adicionar os arquivos, execute a geração de código pelo terminal:
cd /caminho/para/o/projeto./Pods/Apollo/apollo-ios-cli --download-schema --endpoint=https://seu-servidor/graphql./Pods/Apollo/apollo-ios-cli --generateAgora você tem arquivos Swift gerados com tipos e consultas.
2. Consulta básica (Query) em Swift
Vamos analisar a consulta mais simples para obter uma lista de usuários. Suponha que nosso schema contenha o tipo User com os campos id, name, email.
2.1 Criando o arquivo .graphql
Na pasta GraphQL, crie o arquivo Queries.graphql:
query GetUsers { users { id name email }}2.2 Executando a consulta em Swift
Primeiro, inicializamos o cliente Apollo:
import Apollo
class NetworkManager { static let shared = NetworkManager() let apollo: ApolloClient private init() { let url = URL(string: "https://seu-servidor/graphql")! apollo = ApolloClient(url: url) }}Agora, execute a consulta em qualquer ViewController ou ViewModel:
import SwiftUI
struct UsersView: View { @State private var users: [GetUsersQuery.Data.User] = [] var body: some View { List(users, id: \\.id) { user in VStack(alignment: .leading) { Text(user.name) .font(.headline) Text(user.email) .font(.subheadline) .foregroundColor(.gray) } } .onAppear { loadUsers() } } private func loadUsers() { NetworkManager.shared.apollo.fetch(query: GetUsersQuery()) { result in switch result { case .success(let graphQLResult): if let usersData = graphQLResult.data?.users { self.users = usersData } case .failure(let error): print("Erro: \\(error.localizedDescri