GraphQL API avec Swift : tutoriel étape par étape
GraphQL devient un standard pour les API modernes grâce à sa flexibilité et son efficacité. Contrairement à REST, où vous obtenez une structure de données fixe, GraphQL permet de demander uniquement ce dont vous avez besoin. Dans ce tutoriel, nous allons voir comment intégrer une API GraphQL dans des applications Swift pour iOS et macOS, en utilisant la bibliothèque Apollo iOS. Vous apprendrez à exécuter des requêtes, des mutations et à gérer les erreurs.
1. Configuration du projet et installation d'Apollo iOS
La première étape consiste à créer un nouveau projet Xcode et à ajouter la dépendance Apollo iOS via Swift Package Manager (SPM).
Étape 1.1 : Création du projet
Ouvrez Xcode et créez un nouveau projet (iOS App ou macOS App). Choisissez SwiftUI ou UIKit — notre exemple fonctionnera avec les deux plateformes.
Étape 1.2 : Installation d'Apollo iOS via SPM
- Dans Xcode, allez dans
File → Add Packages... - Collez l'URL du dépôt :
https://github.com/apollographql/apollo-ios.git - Sélectionnez la dernière version stable (par exemple 1.15.0) et cliquez sur Add Package.
- Dans la fenêtre qui apparaît, sélectionnez votre projet et ajoutez le package Apollo.
Étape 1.3 : Génération du schéma et du code
Apollo iOS utilise la génération de code basée sur le schéma GraphQL. Téléchargez d'abord le schéma de votre API (généralement via une introspection query). Pour le test, nous utiliserons l'API publique Countries GraphQL (https://countries.trevorblades.com).
Créez un fichier schema.graphqls à la racine du projet et placez-y le schéma (vous pouvez l'obtenir via GraphQL Playground). Ajoutez ensuite le script de génération dans Build Phases :
// Exemple de script dans Build Phasesif which apollo-ios-cli >/dev/null; then apollo-ios-cli generateelse echo "Apollo CLI n'est pas installé. Installez-le via : brew install apollo-ios-cli"fiInstallez le CLI via Homebrew : brew install apollo-ios-cli.
2. Exécution d'une requête GraphQL de base
Maintenant que le projet est configuré, écrivons le code pour exécuter une requête. Nous allons récupérer une liste de pays avec leurs codes et noms.
Étape 2.1 : Création de la requête GraphQL
Dans le dossier du projet, créez un fichier Countries.graphql et ajoutez la requête :
query GetCountries { countries { code name }}Après cela, lancez la génération de code (via Build ou le terminal). Apollo créera les structures GetCountriesQuery et GetCountriesQuery.Data.
Étape 2.2 : Configuration d'ApolloClient
Créez un gestionnaire réseau :
import 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) }()}Étape 2.3 : Exécution de la requête dans SwiftUI
Exemple pour SwiftUI :
import SwiftUI
struct ContentView: View { @State private var countries: [GetCountriesQuery.Data.Country] = [] var body: some View { List(countries, id: \\.code) { country in Text("\\(country.name) (\\(country.code))") } .onAppear { loadCountries() } } func loadCountries() { NetworkManager.shared.apollo.fetch(query: GetCountriesQuery()) { result in switch result { case .success(let graphQLResult): if let countries = graphQLResult.data?.countries { self.countries = countries } case .failure(let error): print("Erreur de requête : \\(error.localizedDescription)") } } }}Lancez l'application. Si tout est correct, vous verrez la liste des pays. Félicitations, vous avez intégré GraphQL dans Swift !