0Pricing
Swift Academy · Leçon

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 Error

Vé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 cancel

Interception 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

  1. URLSession data(from:) avec async/await
  2. Codable : encoder et décoder du JSON
  3. Gestion des erreurs et codes d’état HTTP
  4. Logique de nouvelle tentative et URLSession en arrière-plan
← Retour à Swift Academy