0Pricing
Swift Academy · Leçon

Encodage du contenu et du JSON

Décodez et encodez les corps des requêtes et des réponses.

Encodage du contenu et du JSON est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 2 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.

Le protocole Content

Les modèles Vapor qui transitent par HTTP sont conformes à Content. Content s’appuie sur le Codable de Swift et permet de décoder automatiquement le corps des requêtes et d’encoder les réponses.

import Vapor

struct Todo: Content {
    var id: Int?
    var title: String
    var done: Bool
}

Encoder une réponse en JSON

Renvoyez toute valeur Content depuis une fonction de traitement et Vapor l’encode en JSON en définissant pour vous l’en-tête Content-Type approprié.

app.get("todo") { req -> Todo in
    Todo(id: 1, title: "Learn Vapor", done: false)
}

Décoder le corps d’une requête

Lisez une charge utile typée depuis une requête entrante avec req.content.decode(_:). Vapor examine le Content-Type et analyse le JSON, ou les données de formulaire, en conséquence.

app.post("todo") { req -> Todo in
    let incoming = try req.content.decode(Todo.self)
    return incoming
}

Les tableaux comme contenu

Les collections de types Content sont automatiquement encodées en tableaux JSON. Renvoyez [Todo] et le client reçoit une liste JSON.

app.get("todos") { req -> [Todo] in
    [Todo(id: 1, title: "A", done: false),
     Todo(id: 2, title: "B", done: true)]
}

Clés de codage personnalisées

Comme Content est Codable, vous pouvez associer les noms des propriétés Swift à d’autres clés JSON avec CodingKeys — ce qui est utile pour les API utilisant des traits de soulignement dans leurs noms.

struct User: Content {
    var firstName: String
    enum CodingKeys: String, CodingKey {
        case firstName = "first_name"
    }
}

Configurer l’encodeur JSON

Vous pouvez définir une stratégie globale d’encodage, par exemple convertir toutes les clés en notation avec des traits de soulignement ou formater les dates selon ISO-8601, via ContentConfiguration.

let encoder = JSONEncoder()
encoder.keyEncodingStrategy = .convertToSnakeCase
encoder.dateEncodingStrategy = .iso8601
ContentConfiguration.global.use(encoder: encoder, for: .json)

Valider le contenu décodé

Le protocole Validatable de Vapor vous permet de déclarer des règles de validation. Appelez try Todo.validate(content: req) avant le décodage pour rejeter les données d’entrée incorrectes avec une erreur 400 claire.

extension Todo: Validatable {
    static func validations(_ v: inout Validations) {
        v.add("title", as: String.self, is: !.empty)
    }
}

Utiliser la validation dans une fonction de traitement

Validez d’abord, puis décodez. Si la validation échoue, Vapor lève automatiquement une erreur et le client reçoit une réponse d’erreur détaillée.

app.post("todo") { req -> Todo in
    try Todo.validate(content: req)
    return try req.content.decode(Todo.self)
}

Séparer les DTO de requête et de réponse

Il est recommandé de conserver des types distincts pour les données d’entrée et de sortie. Par exemple, utilisez un CreateTodo sans identifiant pour les requêtes et un Todo complet pour les réponses. Cela découple votre API de vos modèles internes.

struct CreateTodo: Content {
    var title: String
}
struct TodoResponse: Content {
    var id: Int
    var title: String
}

Encoder les chaînes de requête

Le même mécanisme Content décode les chaînes de requête dans une structure via req.query.decode(_:), ce qui est idéal pour les paramètres de filtrage et de pagination.

struct Page: Content {
    var page: Int?
    var size: Int?
}
app.get("items") { req -> String in
    let p = try req.query.decode(Page.self)
    return "page=" + String(p.page ?? 1)
}

Renvoyer un statut personnalisé avec du contenu

Pour contrôler à la fois le corps et le statut, construisez une Response et encodez-y le contenu, ou renvoyez une construction semblable à un tuple. L’exemple ci-dessous définit le statut 201 Created avec un corps JSON.

app.post("todo") { req -> Response in
    let todo = try req.content.decode(Todo.self)
    let res = Response(status: .created)
    try res.content.encode(todo)
    return res
}

Vérification rapide : contenu et JSON

Vérifiez vos connaissances en matière d’encodage.

Récapitulatif : contenu et encodage JSON

Vous avez appris comment les données sont transmises avec Vapor :

  • Rendez les modèles conformes à Content (fondé sur Codable).
  • Renvoyez du contenu pour encoder du JSON ; utilisez req.content.decode pour lire les corps des requêtes.
  • Personnalisez les clés et les dates avec CodingKeys et ContentConfiguration.
  • Validez les données d’entrée avec Validatable et envisagez de séparer les DTO de requête et de réponse.

Questions Fréquemment Posées

La leçon « Encodage du contenu et du JSON » est-elle gratuite ?

Oui — le texte complet de « Encodage du contenu et du JSON » 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 « Encodage du contenu et du JSON » ?

Décodez et encodez les corps des requêtes et des réponses. 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 2 sur 4.

Combien de temps prend la leçon « Encodage du contenu et du JSON » ?

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. Routage et gestion des requêtes
  2. Encodage du contenu et du JSON
  3. ORM Fluent et modèles
  4. Intergiciels et authentification
← Retour à Swift Academy