Apollo iOS: Cliente GraphQL Poderoso para Aplicativos Swift
Apollo iOS é uma biblioteca moderna e type-safe para trabalhar com APIs GraphQL nas plataformas Apple: iOS, macOS, tvOS e watchOS. Desenvolvida pela Apollo GraphQL, ela fornece aos desenvolvedores ferramentas convenientes para executar consultas, mutações e assinaturas, gerando automaticamente código Swift fortemente tipado com base no seu esquema GraphQL.
A biblioteca é ideal para criar aplicativos móveis e desktop modernos que exigem manipulação flexível de dados, cache e alto desempenho. Apollo iOS elimina a necessidade de análise manual de JSON e garante segurança total de tipos em tempo de compilação.
Principais Recursos
- Geração automática de código — com base em arquivos .graphql e no esquema do servidor, são criados modelos de dados, consultas e mutações tipificados.
- Cache normalizado — o cache embutido atualiza automaticamente a UI quando os dados mudam, evitando duplicação de objetos.
- Suporte a assinaturas via WebSocket — atualizações em tempo real para chats, notificações e outros dados dinâmicos.
- Integração com SwiftUI e Combine — Publishers assíncronos nativos e ObservableObject para programação reativa.
- Multithreading — todas as requisições de rede são executadas em segundo plano, mantendo a thread principal livre para a UI.
- Suporte a upload de arquivos — trabalha com requisições multipart para envio de imagens e documentos.
Instalação via Swift Package Manager
Adicione Apollo iOS ao seu projeto através do Xcode ou Package.swift:
// Package.swiftdependencies: [ .package(url: "https://github.com/apollographql/apollo-ios.git", from: "1.0.0")]Exemplo: configurando o cliente e executando uma consulta
Vamos criar uma instância do cliente e executar uma consulta GraphQL simples para obter uma lista de usuários:
import Apollo
// 1. Criando o clientelet url = URL(string: "https://api.example.com/graphql")!let store = ApolloStore()let client = ApolloClient(url: url, store: store)
// 2. Definindo a consulta (arquivo Users.graphql)// query GetUsers { users { id name email } }
// 3. Executando a consultaclient.fetch(query: GetUsersQuery()) { result in switch result { case .success(let graphQLResult): if let users = graphQLResult.data?.users { for user in users { print("\\(user.name) — \\(user.email)") } } case .failure(let error): print("Erro: \\(error.localizedDescription)") }}Trabalhando com Mutações (alteração de dados)
Exemplo de mutação para criar um novo usuário:
// mutation CreateUser($name: String!, $email: String!) {// createUser(name: $name, email: $email) { id name email }// }
let mutation = CreateUserMutation(name: "João Silva", email: "joao@example.com")
client.perform(mutation: mutation) { result in switch result { case .success(let graphQLResult): if let newUser = graphQLResult.data?.createUser { print("Usuário criado: \\(newUser.id)") } case .failure(let error): print("Erro ao criar: \\(error)") }}Assinaturas (atualizações em tempo real)
Para obter dados em tempo real, use assinaturas. Requer transporte WebSocket:
import ApolloWebSocket
let webSocketTransport = WebSocketTransport( request: URLRequest(url: URL(string: "wss://api.example.com/graphql")!))let store = ApolloStore()let client = ApolloClient(networkTransport: webSocketTransport, store: store)
// subscription OnUserAdded { userAdded { id name } }let subscription =