Introduction : Pourquoi GraphQL et Swift ?
Le développement iOS et macOS moderne nécessite des moyens flexibles et efficaces d'interagir avec le serveur. Les API REST traditionnelles conduisent souvent au problème de over-fetching (récupération de données superflues) ou d'under-fetching (données insuffisantes). GraphQL résout ces problèmes en permettant au client de demander uniquement les données dont il a besoin, en une seule requête.
Dans ce tutoriel, nous allons créer une application complète en Swift qui interagira avec une API GraphQL. Vous apprendrez à configurer le projet, à effectuer des requêtes, des mutations et à gérer les erreurs. Comme client, nous utiliserons Apollo iOS — la bibliothèque la plus populaire pour travailler avec GraphQL dans l'écosystème Apple.
Configuration du projet et installation d'Apollo iOS
Création d'un nouveau projet
Ouvrez Xcode et créez un nouveau projet d'application iOS ou macOS. Nommons-le GraphQLDemo.
Installation d'Apollo iOS via Swift Package Manager
- Dans Xcode, allez dans File → Add Packages...
- Collez l'URL du dépôt Apollo :
https://github.com/apollographql/apollo-ios.git - Sélectionnez la dernière version stable et cliquez sur Add Package.
- Assurez-vous que le package est ajouté à la cible de votre application.
Génération de code à partir du schéma GraphQL
Apollo utilise la génération de code pour créer des classes typées et sécurisées. Pour cela, nous avons besoin d'un fichier de schéma (schema.graphqls) et de fichiers de requêtes (.graphql).
Créez un dossier GraphQL dans le projet et placez-y :
schema.graphqls— téléchargez le schéma de votre API ou utilisez un schéma public (par exemple, Countries GraphQL API).Queries.graphql— le fichier contenant vos requêtes.
Exemple de contenu de Queries.graphql :
query GetCountries {
countries {
code
name
capital
currency
}
}
Ajoutez maintenant une Build Phase pour la génération de code. Dans Xcode : Target → Build Phases → + → New Run Script Phase. Collez le script :
cd "${SRCROOT}/${TARGET_NAME}"
./Pods/Apollo/scripts/run-bundled-codegen.sh codegen:generate --target=swift --includes=./**/*.graphql --localSchemaFile=./schema.graphqls ./GraphQL/API.swift
Remarque : Dans les versions modernes d'Apollo iOS, on utilise apollo-ios-cli. Nous vous recommandons de consulter la documentation officielle pour des instructions à jour.
Exécution de requêtes GraphQL (Queries)
Initialisation du client Apollo
Créons un gestionnaire pour travailler avec Apollo. Ouvrez le fichier NetworkManager.swift :
import Foundation
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)
}()
}
Exécution de la requête
Exécutons maintenant la requête GetCountries dans notre 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")")
}
}