GraphQL en Swift: Guía completa de la biblioteca Apollo iOS

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Biblioteca Apollo iOS para trabajar con GraphQL en Swift



Apollo iOS es una biblioteca potente y flexible para trabajar con GraphQL en el ecosistema de Apple. Proporciona a los desarrolladores de iOS y macOS una herramienta conveniente para ejecutar consultas, mutaciones y suscripciones a servidores GraphQL. A diferencia de REST API, GraphQL permite al cliente solicitar solo los datos necesarios, lo que reduce el volumen de tráfico y acelera el funcionamiento de las aplicaciones. Apollo iOS es totalmente compatible con Swift, incluidas las capacidades modernas del lenguaje como async/await, Combine y SwiftUI.



Características principales de Apollo iOS

  • Generación de código: Creación automática de modelos de datos con seguridad de tipos basados en el esquema GraphQL.
  • Almacenamiento en caché: Soporte integrado para caché normalizado para optimizar consultas repetitivas.
  • Soporte para Swift Concurrency: Integración completa con async/await para operaciones asíncronas.
  • Suscripciones a través de WebSocket: Implementación de actualizaciones en tiempo real mediante GraphQL subscriptions.
  • Combine y SwiftUI: Posibilidad de uso con los frameworks reactivos de Apple.
  • Multiplataforma: Funciona en iOS, macOS, tvOS y watchOS.


Instalación de la biblioteca

Para instalar Apollo iOS, use Swift Package Manager. Agregue el paquete en Xcode a través del menú File → Add Packages e indique la URL:

https://github.com/apollographql/apollo-ios.git

Versión: la última estable (al momento de escribir — 1.15.0).



Configuración de Apollo Client

El primer paso es crear una instancia de ApolloClient con la URL de su servidor GraphQL. Ejemplo de configuración básica:

import Apollo

class NetworkService { static let shared = NetworkService() private(set) lazy var apollo: ApolloClient = { let url = URL(string: "https://api.example.com/graphql")! return ApolloClient(url: url) }()}


Ejecución de consultas (Queries)

Apollo iOS genera código basado en el esquema GraphQL. Primero, defina la consulta en un archivo .graphql:

query GetUser($id: ID!) {    user(id: $id) {        id        name        email        posts {            title        }    }}

Después de la generación del código, ejecute la consulta:

import Apollo

func fetchUser(id: String) async throws -> GetUserQuery.Data.User? { let query = GetUserQuery(id: id) let result = try await NetworkService.shared.apollo.fetch(query: query) return result.data?.user}


Mutaciones (Mutation)

Para modificar datos, use mutaciones. Ejemplo de creación de una nueva publicación:

mutation CreatePost($title: String!, $content: String!) {    createPost(input: { title: $title, content: $content }) {        id        title        createdAt    }}

Ejecución de la mutación en Swift:

func createPost(title: String, content: String) async throws -> CreatePostMutation.Data.CreatePost? {    let mutation = CreatePostMutation(title: title, content: content)    let result = try await NetworkService.shared.apollo.perform(mutation: mutation)    return result.data?.createPost}


Trabajo con suscripciones (Subscriptions)

Para actualizaciones en tiempo real, use suscripciones. Ejemplo de suscripción a nuevos mensajes:

subscription OnNewMessage {    newMessage {        id        text        sender {            name        }    }}

Implementación en Swift usando Combine:

import Combine

var cancellables = Set<AnyCancellable>()

func subscribeToMessages() { let subscription = OnNewMessageSubscription() NetworkService.shared.apollo.subscribe(subscription: subscription) .sink { completion in print("Subscription

Recommendations