0Pricing
Swift Academy · Lezione

Routing e gestione delle richieste

Definisci percorsi e gestisci richieste HTTP.

Routing e gestione delle richieste è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 1 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.

Che cos'è Vapor?

Vapor è un popolare framework web Swift lato server basato su SwiftNIO. Consente di scrivere backend HTTP — API e siti web — interamente in Swift, condividendo il linguaggio e persino i modelli con la Sua app iOS.

import Vapor

let app = try await Application.make(.detect())

L'Application e le route

L'oggetto Application è il cuore di un server Vapor. Su di esso si registrano le route: associazioni tra un metodo HTTP e un percorso e una closure handler che restituisce una risposta.

app.get("hello") { req in
    "Hello, world!"
}

Helper per i metodi HTTP

Vapor espone un helper per ogni verbo HTTP: app.get, app.post, app.put, app.patch e app.delete. Ognuno accetta componenti del percorso e un handler.

app.post("users") { req in
    "Created a user"
}
app.delete("users") { req in
    "Deleted a user"
}

Segmenti del percorso

Passi più segmenti stringa per creare percorsi annidati. La chiamata seguente risponde a GET /api/v1/status.

app.get("api", "v1", "status") { req in
    "OK"
}

Parametri delle route

Utilizzi un segmento preceduto da due punti per acquisire un valore dinamico. Lo legga dalla richiesta con req.parameters.get(_:). Nell'esempio seguente, una richiesta a /users/42 acquisisce 42.

app.get("users", ":id") { req -> String in
    let id = req.parameters.get("id") ?? "unknown"
    return "User id is " + id
}

Parametri tipizzati

Può convertire un parametro in un tipo concreto passando il tipo a get. Se la conversione non riesce, Vapor restituisce automaticamente un 404, mantenendo puliti gli handler.

app.get("posts", ":id") { req -> String in
    let id = try req.parameters.require("id", as: Int.self)
    return "Post number " + String(id)
}

Parametri della query

Legga gli elementi della query dell'URL tramite req.query. Per /search?term=swift, può decodificare direttamente il termine. I valori facoltativi mancanti vengono semplicemente restituiti come nil.

app.get("search") { req -> String in
    let term = try req.query.get(String.self, at: "term")
    return "Searching for " + term
}

Gruppi di route

Raggruppi le route correlate sotto un prefisso condiviso con app.grouped(...). In questo modo evita di ripetere i componenti del percorso e mantiene raggruppati gli endpoint correlati.

let users = app.grouped("users")
users.get { req in "List users" }      // GET /users
users.post { req in "Create user" }    // POST /users

Restituzione di diversi tipi di risposta

Un handler può restituire una String, un HTTPStatus, un tipo Content personalizzato o una Response completamente costruita. Vapor sa come codificarli in una risposta HTTP.

app.delete("cache") { req -> HTTPStatus in
    // clear something
    return .noContent // 204
}

Generazione di errori con Abort

Lanci Abort(_:) per interrompere una richiesta con uno specifico stato HTTP e un motivo facoltativo. Vapor lo trasforma in una risposta di errore JSON chiara.

app.get("secret") { req -> String in
    guard req.headers.first(name: "X-Key") == "open" else {
        throw Abort(.forbidden, reason: "Missing key")
    }
    return "Welcome"
}

Handler asincroni

Vapor 4+ supporta completamente async/await. Renda asincrona la closure dell'handler e utilizzi try await al suo interno per le operazioni sul database o sulla rete.

app.get("ping") { req async throws -> String in
    try await Task.sleep(for: .milliseconds(10))
    return "pong"
}

Verifica rapida: routing

Verifichi le Sue conoscenze del routing.

Riepilogo: routing e gestione delle richieste

Ora è in grado di configurare un server Vapor:

  • Registri le route con app.get/post/put/patch/delete e i segmenti del percorso.
  • Acquisisca valori dinamici con :param e li legga tramite req.parameters (tipizzati con require(_:as:)).
  • Legga gli elementi della query da req.query e raggruppi le route con grouped.
  • Restituisca stringhe, stati o contenuti; lanci Abort per gli errori e utilizzi handler asincroni.

Domande Frequenti

La lezione «Routing e gestione delle richieste» è gratuita?

Sì — il testo completo di «Routing e gestione delle richieste» è 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 «Routing e gestione delle richieste»?

Definisci percorsi e gestisci richieste HTTP. 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 1 di 4.

Quanto tempo richiede la lezione «Routing e gestione delle richieste»?

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