Introduction à GraphQL et Swift
\nGraphQL est un langage de requête pour API qui permet aux clients d'obtenir exactement les données dont ils ont besoin, et rien de superflu. Pour les développeurs iOS et macOS, l'intégration de GraphQL ouvre de nouvelles possibilités pour créer des applications mobiles efficaces et flexibles. Dans ce tutoriel, nous allons voir en pratique comment connecter une API GraphQL à un projet Swift, effectuer des requêtes et mutations de base, et gérer les erreurs potentielles.
\nContrairement au REST traditionnel, GraphQL permet de demander plusieurs ressources en une seule requête, ce qui est particulièrement important pour les appareils mobiles avec un trafic limité. Nous utiliserons la bibliothèque populaire Apollo iOS — la solution la plus stable et la mieux documentée pour travailler avec GraphQL en Swift.
\n\nPréparation du projet et installation d'Apollo iOS
\nÉtape 1 : Création du projet et installation des dépendances
\nOuvrez Xcode et créez un nouveau projet iOS (ou macOS). Pour travailler avec GraphQL, nous installerons Apollo iOS via Swift Package Manager (SPM).
\n- \n
- Dans Xcode, sélectionnez
File → Add Packages\n - Collez l'URL du dépôt :
https://github.com/apollographql/apollo-ios.git\n - Sélectionnez la dernière version stable (au moment de la rédaction — 1.15+) \n
- Ajoutez le paquet à votre cible \n
Étape 2 : Génération de code à partir du schéma GraphQL
\nApollo iOS utilise la génération de code : vous décrivez les requêtes dans des fichiers .graphql, et l'utilitaire crée du code Swift typé. Pour cela, il faut :
- \n
- Créez un dossier
GraphQLdans le projet \n - Placez-y le fichier
schema.graphqls(le schéma de votre API) — généralement obtenu via introspection \n - Créez un fichier de requête, par exemple
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\nEnsuite, ajoutez une Build Phase avec l'exécution du générateur de code. Le plus simple est d'installer Apollo CLI via Homebrew :
\nbrew install apollo-ios-cli\n\nEt exécutez la commande à la racine du projet :
\n./apollo-ios-cli generate\n\nAprès cela, des fichiers Swift générés avec les modèles de données apparaîtront dans le dossier Sources/API.
Exécution de requêtes GraphQL de base
\nConfiguration du client Apollo
\nCréez une instance du client Apollo en spécifiant l'URL de votre endpoint GraphQL. Cela se fait généralement dans AppDelegate ou dans une classe de service séparée :
\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\nRequête de données (Query)
\nMaintenant, effectuons une requête pour obtenir un utilisateur. Le code généré créera une structure 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 = "Erreur : \\(error.localizedDescription)"\n }\n }\n }\n }\n}\n\nNotez que nous utilisons @Published pour la mise à jour réactive de l'interface utilisateur dans