Introducción a GraphQL y Swift
\nGraphQL es un lenguaje de consultas para API que permite a los clientes obtener exactamente los datos que necesitan, y nada más. Para los desarrolladores de iOS y macOS, la integración de GraphQL abre nuevas posibilidades para crear aplicaciones móviles eficientes y flexibles. En este tutorial, analizaremos en la práctica cómo conectar GraphQL API a un proyecto Swift, realizar consultas y mutaciones básicas, así como manejar posibles errores.
\nA diferencia del REST tradicional, GraphQL permite solicitar múltiples recursos en una sola consulta, lo cual es especialmente importante para dispositivos móviles con tráfico limitado. Usaremos la popular biblioteca Apollo iOS, la solución más estable y documentada para trabajar con GraphQL en Swift.
\n\nPreparación del proyecto e instalación de Apollo iOS
\nPaso 1: Creación del proyecto e instalación de dependencias
\nAbra Xcode y cree un nuevo proyecto iOS (o macOS). Para trabajar con GraphQL, instalaremos Apollo iOS a través de Swift Package Manager (SPM).
\n- \n
- En Xcode, seleccione
File → Add Packages\n - Pegue la URL del repositorio:
https://github.com/apollographql/apollo-ios.git\n - Seleccione la última versión estable (en el momento de escribir esto, 1.15+) \n
- Agregue el paquete a su target \n
Paso 2: Generación de código según el esquema GraphQL
\nApollo iOS utiliza generación de código: usted describe las consultas en archivos .graphql, y la utilidad crea código Swift tipado. Para ello, es necesario:
- \n
- Cree una carpeta
GraphQLen el proyecto \n - Coloque allí el archivo
schema.graphqls(el esquema de su API); generalmente se puede obtener mediante introspection \n - Cree un archivo de consulta, por ejemplo
GetUser.graphql: \n
query GetUser($id: ID!) {\n user(id: $id) {\n id\n name\n email\n posts {\n title\n }\n }\n}\n\nLuego, agregue una Build Phase con la ejecución del generador de código. La forma más sencilla es instalar Apollo CLI a través de Homebrew:
\nbrew install apollo-ios-cli\n\nY ejecutar el comando en la raíz del proyecto:
\n./apollo-ios-cli generate\n\nDespués de esto, en la carpeta Sources/API aparecerán archivos Swift generados con los modelos de datos.
Ejecución de consultas GraphQL básicas
\nConfiguración del cliente Apollo
\nCree una instancia del cliente Apollo, especificando la URL de su endpoint GraphQL. Generalmente, esto se hace en AppDelegate o en una clase de servicio separada:
\n\nimport Apollo\n\nclass NetworkService {\n static let shared = NetworkService()\n private(set) lazy var apollo: ApolloClient = {\n let url = URL(string: "https://your-api.com/graphql")!\n return ApolloClient(url: url)\n }()\n}\n\nConsulta de datos (Query)
\nAhora realizaremos una consulta para obtener un usuario. El código generado creará la estructura GetUserQuery:
import Foundation\n\nclass UserViewModel: ObservableObject {\n @Published var user: User?\n @Published var errorMessage: String?\n \n func fetchUser(id: String) {\n NetworkService.shared.apollo.fetch(query: GetUserQuery(id: id)) { [weak self] result in\n DispatchQueue.main.async {\n switch result {\n case .success(let graphQLResult):\n if let userData = graphQLResult.data?.user {\n self?.user = User(\n id: userData.id,\n name: userData.name,\n email: userData.email\n )\n }\n case .failure(let error):\n self?.errorMessage = "Error: \\(error.localizedDescription)"\n }\n }\n }\n }\n}\n\nTenga en cuenta: usamos @Published para la actualización reactiva de la UI en