Apollo iOS: Potente cliente GraphQL para aplicaciones Swift
Apollo iOS es una biblioteca moderna y tipográficamente segura para trabajar con API GraphQL en las plataformas de Apple: iOS, macOS, tvOS y watchOS. Desarrollada por la empresa Apollo GraphQL, proporciona a los desarrolladores herramientas convenientes para ejecutar consultas, mutaciones y suscripciones, generando automáticamente código Swift fuertemente tipado basado en su esquema GraphQL.
La biblioteca es ideal para crear aplicaciones móviles y de escritorio modernas que requieren un manejo flexible de datos, almacenamiento en caché y alto rendimiento. Apollo iOS elimina la necesidad de analizar JSON manualmente y garantiza la seguridad total de tipos en tiempo de compilación.
Características principales
- Generación automática de código — basada en archivos .graphql y el esquema del servidor, se crean modelos de datos, consultas y mutaciones tipificados.
- Caché normalizado — la caché incorporada actualiza automáticamente la interfaz de usuario cuando los datos cambian, evitando la duplicación de objetos.
- Soporte para suscripciones a través de WebSocket — actualizaciones en tiempo real para chats, notificaciones y otros datos dinámicos.
- Integración con SwiftUI y Combine — Publishers asíncronos nativos y ObservableObject para programación reactiva.
- Multihilo — todas las solicitudes de red se ejecutan en segundo plano, dejando el hilo principal libre para la interfaz de usuario.
- Soporte para carga de archivos — trabajo con solicitudes multipart para enviar imágenes y documentos.
Instalación a través de Swift Package Manager
Agregue Apollo iOS a su proyecto a través de Xcode o Package.swift:
// Package.swiftdependencies: [ .package(url: "https://github.com/apollographql/apollo-ios.git", from: "1.0.0")]Ejemplo: configuración del cliente y ejecución de una consulta
Creemos una instancia del cliente y ejecutemos una consulta GraphQL simple para obtener una lista de usuarios:
import Apollo
// 1. Creamos el clientelet url = URL(string: "https://api.example.com/graphql")!let store = ApolloStore()let client = ApolloClient(url: url, store: store)
// 2. Definimos la consulta (archivo Users.graphql)// query GetUsers { users { id name email } }
// 3. Ejecutamos la 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("Error: \\(error.localizedDescription)") }}Trabajo con mutaciones (modificación de datos)
Ejemplo de mutación para crear un nuevo usuario:
// mutation CreateUser($name: String!, $email: String!) {// createUser(name: $name, email: $email) { id name email }// }
let mutation = CreateUserMutation(name: "Iván Petrov", email: "ivan@example.com")
client.perform(mutation: mutation) { result in switch result { case .success(let graphQLResult): if let newUser = graphQLResult.data?.createUser { print("Usuario creado: \\(newUser.id)") } case .failure(let error): print("Error de creación: \\(error)") }}Suscripciones (actualizaciones en tiempo real)
Para obtener datos en tiempo real, use suscripciones. Se requiere 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 =