Introduction : pourquoi GraphQL et Swift forment le duo idéal
Le développement iOS moderne est impensable sans une interaction efficace avec le serveur. L'API REST cède progressivement la place à une technologie plus flexible et performante — GraphQL. Dans ce tutoriel, nous allons voir comment intégrer l'API GraphQL dans une application Swift en pratique, en utilisant la bibliothèque Apollo iOS.
GraphQL permet de demander exactement les données nécessaires — ni plus, ni moins. Pour Swift, cela signifie une réduction du trafic, une accélération du travail et une simplification du code. Nous parcourrons le chemin complet : de la configuration du projet à l'exécution de requêtes et mutations complexes.
1. Configuration du projet et installation d'Apollo iOS
La première étape — préparer le projet Xcode et installer les dépendances. La méthode la plus pratique est via Swift Package Manager.
1.1 Création d'un nouveau projet
Ouvrez Xcode et créez un nouveau projet (iOS App ou macOS App). Choisissez SwiftUI ou UIKit — ce n'est pas déterminant. Nommons-le GraphQLDemo.
1.2 Ajout d'Apollo iOS via SPM
- Dans Xcode, allez dans : File → Add Package Dependencies...
- Collez l'URL du dépôt :
https://github.com/apollographql/apollo-ios.git - Sélectionnez la dernière version stable et cliquez sur Add Package.
- Assurez-vous que le paquet est ajouté à la cible de votre application.
1.3 Génération du code du schéma
Apollo iOS utilise la génération de code. Pour cela, nous avons besoin d'un fichier de schéma .graphqls (généralement téléchargé depuis le serveur) et de fichiers de requêtes .graphql.
// Structure du projet :// GraphQLDemo/// ├── GraphQL/// │ ├── schema.graphqls // Schéma du serveur// │ ├── Queries.graphql // Requêtes// │ └── Mutations.graphql // MutationsAprès avoir ajouté les fichiers, lancez la génération de code via le terminal :
cd /chemin/vers/le/projet./Pods/Apollo/apollo-ios-cli --download-schema --endpoint=https://votre-serveur/graphql./Pods/Apollo/apollo-ios-cli --generateVous avez maintenant des fichiers Swift générés avec les types et les requêtes.
2. Requête de base (Query) en Swift
Analysons la requête la plus simple pour obtenir une liste d'utilisateurs. Supposons que notre schéma contienne le type User avec les champs id, name, email.
2.1 Création du fichier .graphql
Dans le dossier GraphQL, créez un fichier Queries.graphql :
query GetUsers { users { id name email }}2.2 Exécution de la requête en Swift
D'abord, initialisons le client Apollo :
import Apollo
class NetworkManager { static let shared = NetworkManager() let apollo: ApolloClient private init() { let url = URL(string: "https://votre-serveur/graphql")! apollo = ApolloClient(url: url) }}Exécutons maintenant la requête dans n'importe quel ViewController ou ViewModel :
import SwiftUI
struct UsersView: View { @State private var users: [GetUsersQuery.Data.User] = [] var body: some View { List(users, id: \\.id) { user in VStack(alignment: .leading) { Text(user.name) .font(.headline) Text(user.email) .font(.subheadline) .foregroundColor(.gray) } } .onAppear { loadUsers() } } private func loadUsers() { NetworkManager.shared.apollo.fetch(query: GetUsersQuery()) { result in switch result { case .success(let graphQLResult): if let usersData = graphQLResult.data?.users { self.users = usersData } case .failure(let error): print("Erreur : \\(error.localizedDescri