Alamofire est un client HTTP pour iOS, macOS, tvOS et watchOS, écrit en Swift. La bibliothèque automatise les tâches de codage des paramètres, de validation des réponses et de sérialisation des données. Selon le dépôt GitHub d'Alamofire, le projet est utilisé par plus de 40 000 applications dans le monde. Alamofire est considéré comme la norme de facto pour les communications réseau dans l'écosystème Apple.
Points clés
Alamofire est une bibliothèque pour travailler avec des requêtes HTTP sur les plateformes Apple, écrite entièrement en Swift. Le développement a commencé en 2014 comme alternative à la bibliothèque Objective-C AFNetworking et est rapidement devenu la norme pour les communications réseau dans la communauté iOS.
La bibliothèque est construite sur le framework système URLSession, abstraisant son API de bas niveau en chaînes de méthodes concises. Alamofire prend en charge toutes les fonctionnalités d'URLSession : sessions en arrière-plan, intercepteurs de requêtes, certificats SSL et plusieurs méthodes de sérialisation des réponses.
Selon le Swift Package Index, Alamofire fait partie des 10 packages Swift les plus populaires avec plus de 45 000 étoiles sur GitHub. La bibliothèque est compatible avec iOS 10+, macOS 10.12+, tvOS 10+ et watchOS 3+.
Le principal avantage d'Alamofire par rapport à l'utilisation directe d'URLSession est la réduction du code passe-partout. Un seul appel AF.request remplace 15 à 20 lignes de configuration manuelle d'URLRequest, de traitement de réponse et de décodage de données. Parallèlement, la bibliothèque conserve une flexibilité totale pour les scénarios personnalisés grâce à des sessions et des extensions personnalisées.
Alamofire fournit une large gamme de fonctions réseau couvrant la plupart des scénarios de développement mobile. Grâce à son architecture modulaire, les développeurs n'ont qu'à inclure les composants nécessaires.
Les méthodes HTTP GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS et TRACE sont implémentées via une API uniforme. Chaque méthode accepte des paramètres de requête, des en-têtes et retourne une réponse sous forme de type Result. Le développeur n'a pas besoin de configurer URLRequest manuellement — la bibliothèque le fait automatiquement en fonction des arguments fournis.
La validation des réponses dans Alamofire permet de vérifier les codes de statut et le contenu de la réponse avant de transmettre les données à l'application. La bibliothèque prend en charge des conditions de validation personnalisées via des fermetures, offrant un contrôle total sur la gestion des erreurs. Par défaut, seuls les codes de statut 200–299 sont vérifiés.
Les paramètres sont automatiquement encodés en fonction du type sélectionné : encodage URL pour les requêtes GET et encodage JSON pour POST. Alamofire prend également en charge l'encodage Property List et les encodeurs personnalisés via le protocole ParameterEncoder, permettant d'adapter le format à n'importe quel serveur.
La session dans Alamofire permet de configurer des délais d'attente, des certificats SSL, des en-têtes HTTP par défaut et des proxys. Les intercepteurs EventMonitor permettent de suivre les événements du cycle de vie de la requête : création, envoi, réception de réponse et achèvement. Cela est utile pour la journalisation, l'analyse et le débogage des problèmes réseau en production.
Alamofire utilise une architecture basée sur Session qui encapsule une instance URLSession et la configuration réseau. Chaque requête passe par une chaîne de gestionnaires : adaptateurs, politiques de nouvelle tentative, validateurs et sérialiseurs, garantissant flexibilité et extensibilité.
L'objet Session gère toutes les requêtes réseau dans l'application. Il est créé avec une configuration contenant des délais d'attente, des en-têtes par défaut et des certificats. Chaque appel AF.request retourne un DataRequest qui peut être modifié avant l'envoi. Alamofire gère automatiquement les cycles de rétention via des références faibles à la session, empêchant les fuites de mémoire.
import Alamofire
let session = Session(configuration: config)
session.request("https://api.example.com/users")
.validate()
.responseDecodable(of: [User].self) { response in
switch response.result {
case .success(let users):
print("Reçu \(users.count) utilisateurs")
case .failure(let error):
print("Erreur : \(error.localizedDescription)")
}
}
L'installation d'Alamofire se fait via Swift Package Manager, CocoaPods ou Carthage. La méthode recommandée pour les nouveaux projets est SPM, intégré dans Xcode, car elle ne nécessite aucun outil supplémentaire et l'intégration se fait en quelques clics.
L'ajout du package dans Xcode se fait via le menu File → Add Packages. URL du dépôt : https://github.com/Alamofire/Alamofire. Il est recommandé de fixer la version sur la dernière version stable. Alamofire suit le versionnement sémantique et toutes les modifications importantes sont documentées dans le CHANGELOG.
CocoaPods reste une option populaire pour les projets avec une infrastructure existante. Ajoutez la ligne pod 'Alamofire' à votre Podfile et exécutez pod install. Alamofire n'a aucune dépendance externe, ce qui simplifie l'intégration et élimine les conflits de versions dans les projets existants.
Les exemples ci-dessous montrent des scénarios typiques d'utilisation d'Alamofire dans les applications iOS : des simples requêtes GET au téléchargement de fichiers avec suivi de progression.
Une simple requête GET avec paramètres et décodage de la réponse dans un modèle Codable est le scénario d'utilisation le plus courant d'Alamofire dans les applications mobiles. Les paramètres sont automatiquement encodés et la réponse est décodée via JSONDecoder. Le code est compact et lisible.
struct User: Codable {
let id: Int
let name: String
let email: String
}
AF.request("https://jsonplaceholder.typicode.com/users",
method: .get)
.validate()
.responseDecodable(of: [User].self) { response in
switch response.result {
case .success(let users):
print("Utilisateurs : \(users.count)")
case .failure(let error):
print("Erreur : \(error)")
}
}
Une requête POST avec corps JSON est utilisée pour créer des ressources sur le serveur. Alamofire encode automatiquement l'objet passé via JSONParameterEncoder, évitant au développeur la sérialisation manuelle. La réponse est décodée dans un modèle de données en utilisant le même JSONDecoder.
let newUser = User(id: 1,
name: "Jean Dupont",
email: "ivan@example.com")
AF.request("https://jsonplaceholder.typicode.com/users",
method: .post,
parameters: newUser,
encoder: JSONParameterEncoder.default)
.validate()
.responseDecodable(of: User.self) { response in
if let created = response.value {
print("Utilisateur créé : \(created)")
}
}
La méthode upload dans Alamofire prend en charge le téléchargement de fichiers, de données et de formulaires multipart. La bibliothèque gère automatiquement la progression et permet de suivre l'état du téléchargement via des fermetures uploadProgress, ce qui est pratique pour afficher un indicateur de progression.
let imageData = UIImage(named: "photo")?.jpegData(compressionQuality: 0.8)
AF.upload(imageData,
to: "https://api.example.com/upload")
.uploadProgress { progress in
print("Progression : \(progress.fractionCompleted * 100)%")
}
.responseDecodable(of: UploadResponse.self) { response in
print("Téléchargement terminé")
}
La gestion des erreurs dans Alamofire repose sur une combinaison de validation des réponses et de types Result. Le modèle d'erreurs inclut AFError, qui couvre tous les scénarios typiques de défaillance réseau : délais d'attente, perte de connexion, erreurs serveur et échec de sérialisation. Chaque cas est traité séparément.
Pour les tentatives après une erreur, Alamofire fournit le mécanisme RequestRetrier. Ce protocole définit la politique de nouvelle tentative : nombre de tentatives, délai entre elles et condition sous laquelle une nouvelle tentative est effectuée. Par exemple, en cas d'erreur 503 du serveur, la requête peut être réessayée après 2 secondes, tandis qu'en cas d'erreur 401, un nouveau jeton d'authentification peut être demandé.
L'approche par énumération AFError garantit que le développeur ne manque aucun type d'erreur — le compilateur vérifie l'exhaustivité du traitement. Cela rend le code plus fiable et prévisible par rapport à la gestion des erreurs via NSError dans URLSession pur.
Le protocole RequestRetrier définit une méthode de nouvelle tentative qui reçoit la requête, la session, l'erreur et la fermeture d'achèvement. Dans cette méthode, le développeur décide s'il faut réessayer la requête et après quel délai. Alamofire fournit une implémentation intégrée RetryPolicy pour les scénarios courants, mais pour le code de production, il est recommandé de créer des politiques personnalisées basées sur la logique métier.
AFError est une énumération avec des cas imbriqués pour différentes catégories d'erreurs. Le développeur peut traiter chaque type séparément : pour les délais d'attente — réessayer la requête, pour les erreurs serveur — afficher un message compréhensible à l'utilisateur. Alamofire prend en charge les politiques de nouvelle tentative personnalisées via le protocole RequestRetrier.
La validation intégrée vérifie les codes de statut dans la plage 200–299 et le type de contenu de la réponse. Pour une validation étendue, des conditions personnalisées peuvent être ajoutées via la fermeture validate, permettant de vérifier la logique métier avant de transmettre les données à la couche UI.
Foire aux questions
Alamofire fournit une API de plus haut niveau par rapport à URLSession. La bibliothèque automatise l'encodage des paramètres, la validation des réponses et la sérialisation des données, tandis qu'URLSession nécessite une configuration manuelle de chaque composant de la requête réseau.
Oui, Alamofire est entièrement compatible avec SwiftUI. Les requêtes sont généralement effectuées à l'intérieur d'ObservableObject ou via async/await en utilisant Task. Alamofire ne dépend pas d'UIKit, il fonctionne donc parfaitement dans les applications SwiftUI modernes.
Les principales alternatives à Alamofire sont : URLSession intégré, Moya (une couche au-dessus d'Alamofire avec abstraction d'API), Networking de FreshOS et Apollo GraphQL pour travailler avec des serveurs GraphQL. Le choix dépend de l'architecture du projet.
Alamofire dispose d'une intégration intégrée avec Combine via des extensions Publishers et prend en charge Swift Concurrency via async/await. Cela permet de choisir n'importe quelle méthode moderne de traitement asynchrone.
Le délai d'attente est configuré via la configuration de Session. Définissez les propriétés timeoutIntervalForRequest et timeoutIntervalForResource lors de la création d'URLSessionConfiguration, puis passez-les à l'initialiseur de Session. La valeur par défaut est de 60 secondes.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi