GraphQL API con Swift: tutorial paso a paso para iOS y macOS

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

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

  1. En Xcode, ve a File → Add Packages...
  2. Pega la URL del repositorio de Apollo: https://github.com/apollographql/apollo-ios.git
  3. Selecciona la última versión estable y haz clic en Add Package.
  4. 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")") }

Blogs

Book Recommendations