Gestion des erreurs et codes d’état HTTP
Vérifier les codes d’état des réponses et convertir les erreurs en erreurs de domaine typées.
Gestion des erreurs et codes d’état HTTP est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Swift Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Swift Academy comprend 4 leçons au total.
Plages de codes d'état HTTP
Les réponses HTTP indiquent la réussite ou l'échec au moyen de codes d'état : réussite 2xx, redirection 3xx, erreur côté client 4xx et erreur côté serveur 5xx.
// 200 OK, 201 Created
// 400 Bad Request, 401 Unauthorized, 404 Not Found
// 500 Internal Server ErrorVérification de l'état dans Swift
Convertissez URLResponse en HTTPURLResponse et vérifiez statusCode après une requête asynchrone.
let (data, response) = try await URLSession.shared.data(from: url)
guard let http = response as? HTTPURLResponse else {
throw NetworkError.invalidResponse
}
guard (200..<300).contains(http.statusCode) else {
throw NetworkError.httpError(http.statusCode)
}Erreurs réseau typées
Définissez une énumération d'erreurs typées pour les échecs réseau afin de permettre des blocs catch exhaustifs.
enum NetworkError: Error {
case invalidURL
case invalidResponse
case httpError(Int)
case decodingError(Error)
case noData
}Association des codes d'état aux erreurs
Utilisez une instruction switch sur les codes d'état pour produire des erreurs métier explicites plutôt que des entiers bruts.
switch http.statusCode {
case 200..<300: break // success
case 401: throw NetworkError.unauthorized
case 404: throw NetworkError.notFound
case 500..<600: throw NetworkError.serverError(http.statusCode)
default: throw NetworkError.httpError(http.statusCode)
}Décodage des réponses d'erreur
Lorsque l'état indique une erreur, le corps contient souvent un message d'erreur JSON. Décodez-le pour obtenir un diagnostic plus précis.
if http.statusCode != 200 {
struct APIError: Decodable { var message: String }
let apiError = try? JSONDecoder().decode(APIError.self, from: data)
throw NetworkError.serverMessage(apiError?.message ?? "Unknown error")
}Propagation des erreurs en asynchrone
La concurrence structurée de Swift propage naturellement les erreurs : une erreur levée annule les tâches sœurs d'un TaskGroup.
async let users = fetchUsers()
async let posts = fetchPosts()
let (u, p) = try await (users, posts) // if either throws, both cancelInterception d'erreurs spécifiques
Utilisez des blocs catch typés pour traiter distinctement les différents types d'erreurs dans le code appelant.
do {
let items = try await fetchItems()
} catch NetworkError.unauthorized {
showLoginScreen()
} catch NetworkError.httpError(let code) {
print("HTTP Error: \(code)")
} catch {
print("Unexpected: \(error)")
}Codes d'URLError
URLError décrit les échecs de connectivité : .notConnectedToInternet, .timedOut et .cannotFindHost.
do {
let (data, _) = try await URLSession.shared.data(from: url)
} catch let urlError as URLError where urlError.code == .notConnectedToInternet {
print("No internet connection")
}Enveloppe Result pour le réseau
Renvoyez Result<T, NetworkError> depuis les fonctions de récupération lorsque vous voulez que les appelants gèrent les erreurs sans try/catch.
func fetchUser() async -> Result<User, NetworkError> {
do {
let user = try await performFetch()
return .success(user)
} catch let e as NetworkError {
return .failure(e)
} catch {
return .failure(.unknown)
}
}Journalisation des erreurs
Journalisez les erreurs réseau avec le contexte pertinent (URL, code d'état, corps) afin de faciliter le débogage en production.
func log(_ error: NetworkError, url: URL) {
print("[Network] \(url.absoluteString) → \(error)")
}Messages d'erreur destinés à l'utilisateur
Convertissez les erreurs techniques en messages clairs pour l'utilisateur. N'affichez jamais les codes d'état HTTP bruts dans l'interface.
extension NetworkError: LocalizedError {
var errorDescription: String? {
switch self {
case .unauthorized: return "Please log in again."
case .notFound: return "The requested item was not found."
case .serverError: return "Server error. Please try again later."
default: return "Something went wrong."
}
}
}Vérification rapide
Quelle plage de codes d'état HTTP indique une réponse réussie ?
Récapitulatif de la leçon
Après URLSession.data(from:), convertissez le résultat en HTTPURLResponse et vérifiez statusCode. Associez les codes aux cas d'erreur typés. Utilisez URLError pour les échecs de connectivité. Propagez les erreurs avec try/throw et interceptez-les avec des blocs catch typés.
Questions Fréquemment Posées
La leçon « Gestion des erreurs et codes d’état HTTP » est-elle gratuite ?
Oui — le texte complet de « Gestion des erreurs et codes d’état HTTP » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Swift Academy, passe à CoddyKit PRO. Le cours Swift Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Gestion des erreurs et codes d’état HTTP » ?
Vérifier les codes d’état des réponses et convertir les erreurs en erreurs de domaine typées. Tu pratiques Swift Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Swift Academy ?
Aucune expérience préalable n'est requise. Swift Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Gestion des erreurs et codes d’état HTTP » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Swift Academy ?
Oui. Chaque leçon Swift Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- URLSession data(from:) avec async/await
- Codable : encoder et décoder du JSON
- Gestion des erreurs et codes d’état HTTP
- Logique de nouvelle tentative et URLSession en arrière-plan