API GraphQL avec Swift : tutoriel pas à pas pour iOS et macOS

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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

  1. Dans Xcode, allez dans File → Add Packages...
  2. Collez l'URL du dépôt Apollo : https://github.com/apollographql/apollo-ios.git
  3. Sélectionnez la dernière version stable et cliquez sur Add Package.
  4. 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")")
                    }
                }                

Blogs

Book Recommendations