0Pricing
Swift Academy · Lezione

Codifica di contenuti e JSON

Decodifichi e codifichi i body delle richieste e delle risposte.

Codifica di contenuti e JSON è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Swift Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Swift Academy include 4 lezioni in totale.

Il protocollo Content

I modelli Vapor trasmessi tramite HTTP conformano a Content. Content si basa su Codable di Swift e aggiunge la possibilità di decodificare i corpi delle richieste e codificare automaticamente le risposte.

import Vapor

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

Codifica di una risposta come JSON

Restituisca da un handler qualsiasi valore Content e Vapor lo codificherà in JSON, impostando automaticamente per Lei l'intestazione Content-Type corretta.

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

Decodifica del corpo di una richiesta

Legga un payload tipizzato da una richiesta in arrivo con req.content.decode(_:). Vapor esamina Content-Type e analizza JSON (o dati di un modulo) di conseguenza.

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

Array come Content

Le raccolte di tipi Content vengono codificate automaticamente in array JSON. Restituisca [Todo] e il client riceverà un elenco JSON.

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

Chiavi di codifica personalizzate

Poiché Content è Codable, può associare i nomi delle proprietà Swift a chiavi JSON diverse utilizzando CodingKeys, una soluzione utile per le API snake_case.

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

Configurazione del codificatore JSON

Può impostare una strategia di codifica globale, ad esempio convertendo tutte le chiavi in snake_case o formattando le date come ISO-8601, tramite ContentConfiguration.

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

Convalida del contenuto decodificato

Il protocollo Validatable di Vapor consente di dichiarare regole di convalida. Chiami try Todo.validate(content: req) prima della decodifica per rifiutare input non validi con un chiaro errore 400.

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

Utilizzo della convalida in un handler

Convalidi prima, quindi decodifichi. Se la convalida non riesce, Vapor genera automaticamente un errore e il client riceve una risposta descrittiva.

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

Separazione dei DTO di richiesta e risposta

Una buona pratica consiste nel mantenere tipi distinti per input e output. Ad esempio, utilizzi un CreateTodo senza id per le richieste e un Todo completo per le risposte. In questo modo disaccoppia l'API dai modelli interni.

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

Decodifica delle stringhe di query

Lo stesso meccanismo Content decodifica le stringhe di query in una struct tramite req.query.decode(_:), una soluzione ideale per i parametri di filtro e paginazione.

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)
}

Restituzione di uno stato personalizzato con Content

Per controllare sia il corpo sia lo stato, costruisca una Response e vi codifichi il contenuto, oppure restituisca un costrutto simile a una tupla. Il codice seguente imposta 201 Created con un corpo 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
}

Verifica rapida: Content e JSON

Verifichi le Sue conoscenze della codifica.

Riepilogo: Content e codifica JSON

Ha imparato come i dati attraversano la rete in Vapor:

  • Faccia conformare i modelli a Content (basato su Codable).
  • Restituisca contenuti per codificare JSON; utilizzi req.content.decode per leggere i corpi.
  • Personalizzi chiavi e date tramite CodingKeys e ContentConfiguration.
  • Convalidi l'input con Validatable e valuti l'uso di DTO distinti per richieste e risposte.

Domande Frequenti

La lezione «Codifica di contenuti e JSON» è gratuita?

Sì — il testo completo di «Codifica di contenuti e JSON» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Swift Academy, passa a CoddyKit PRO. Il corso Swift Academy include 4 lezioni in totale.

Cosa imparerò in «Codifica di contenuti e JSON»?

Decodifichi e codifichi i body delle richieste e delle risposte. Eserciti Swift Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Swift Academy?

Non è richiesta alcuna esperienza precedente. Swift Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Codifica di contenuti e JSON»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Swift Academy?

Sì. Ogni lezione Swift Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Routing e gestione delle richieste
  2. Codifica di contenuti e JSON
  3. ORM Fluent e modelli
  4. Middleware e autenticazione
← Torna a Swift Academy