Introducción: ¿Por qué GraphQL y Swift?
El desarrollo moderno de iOS y macOS requiere formas flexibles y eficientes de interactuar con el servidor. Las API REST tradicionales a menudo conducen al problema de over-fetching (obtener datos innecesarios) o under-fetching (falta de datos). GraphQL resuelve estos problemas permitiendo al cliente solicitar solo los datos que necesita en una sola consulta.
En este tutorial crearemos una aplicación completa en Swift que interactuará con una API GraphQL. Aprenderás cómo configurar el proyecto, ejecutar consultas, mutaciones y manejar errores. Como cliente utilizaremos Apollo iOS, la biblioteca más popular para trabajar con GraphQL en el ecosistema de Apple.
Configuración del proyecto e instalación de Apollo iOS
Creación de un nuevo proyecto
Abre Xcode y crea un nuevo proyecto de iOS o macOS App. Nómbralo GraphQLDemo.
Instalación de Apollo iOS mediante Swift Package Manager
- En Xcode, ve a File → Add Packages...
- Pega la URL del repositorio de Apollo:
https://github.com/apollographql/apollo-ios.git - Selecciona la última versión estable y haz clic en Add Package.
- Asegúrate de que el paquete se haya agregado al target de tu aplicación.
Generación de código a partir del esquema GraphQL
Apollo utiliza generación de código para crear clases type-safe. Para esto necesitamos un archivo de esquema (schema.graphqls) y archivos con consultas (.graphql).
Crea una carpeta GraphQL en el proyecto y coloca allí:
schema.graphqls— descarga el esquema de tu API o usa uno público (por ejemplo, Countries GraphQL API).Queries.graphql— archivo con tus consultas.
Ejemplo del contenido de Queries.graphql:
query GetCountries { countries { code name capital currency }}
Ahora agrega una Build Phase para la generación de código. En Xcode: Target → Build Phases → + → New Run Script Phase. Pega el script:
cd "${SRCROOT}/${TARGET_NAME}"./Pods/Apollo/scripts/run-bundled-codegen.sh codegen:generate --target=swift --includes=./**/*.graphql --localSchemaFile=./schema.graphqls ./GraphQL/API.swift
Nota: En versiones modernas de Apollo iOS se utiliza apollo-ios-cli. Recomendamos consultar la documentación oficial para instrucciones actualizadas.
Ejecución de consultas GraphQL (Queries)
Inicialización del cliente Apollo
Creemos un manager para trabajar con Apollo. Abre el archivo NetworkManager.swift:
import Foundationimport 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) }()}
Ejecución de la consulta
Ahora ejecutemos la consulta GetCountries en nuestro ViewController:
import UIKit
class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() fetchCountries() } private func fetchCountries() { NetworkManager.shared.apollo.fetch(query: GetCountriesQuery()) { result in switch result { case .success(let graphQLResult): if let countries = graphQLResult.data?.countries { for country in countries { print("\\(country.name) - \\(country.capital ?? "N/A")") }