0Pricing
Scala for Backend Engineering & Functional Programming · Lektion

Routen und HttpRoutes

Definieren Sie Endpunkte funktional.

Routen und HttpRoutes ist eine kostenlose Scala for Backend Engineering & Functional Programming-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Scala for Backend Engineering & Functional Programming-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Scala for Backend Engineering & Functional Programming-Kurs umfasst insgesamt 4 Lektionen.

Was http4s ist

http4s ist eine rein funktionale HTTP-Bibliothek für Scala, die auf cats-effect und fs2-Streams aufbaut. Anforderungen und Antworten sind unveränderliche Werte, und Effekte werden in einem polymorphen Effekttyp wie F[_], etwa IO, gekapselt.

Statt ein Servlet zu verändern, beschreiben Sie einen HTTP-Dienst als Funktion von einer Anfrage zu einer optionalen Antwort in einem Effekt.

Der Typ HttpRoutes

Die zentrale Abstraktion ist HttpRoutes[F], ein Alias für Kleisli[OptionT[F, *], Request[F], Response[F]]. OptionT modelliert eine Route, die möglicherweise nicht zutrifft und keine Antwort zurückgibt.

Diese Signatur schreiben Sie nur selten von Hand. Stattdessen erstellen Sie Routen mit dem Konstruktor HttpRoutes.of und einer partiellen Funktion.

import cats.effect.IO
import org.http4s._
import org.http4s.dsl.io._

val routes: HttpRoutes[IO] = HttpRoutes.of[IO] {
  case GET -> Root / "hello" => Ok("hi")
}

Die http4s-DSL

Der DSL-Import org.http4s.dsl.io._ stellt Pattern Extractors wie GET, Root und den Pfadtrenner / sowie Antwort-Builder wie Ok und NotFound bereit.

Eine Route ist eine PartialFunction[Request[F], F[Response[F]]]. Nicht zutreffende Fälle werden einfach übersprungen.

import org.http4s.dsl.io._

HttpRoutes.of[IO] {
  case GET -> Root => Ok("root")
  case GET -> Root / "ping" => Ok("pong")
}

Pfade abgleichen

Pfadmuster werden von links nach rechts gelesen. Root ist der führende Schrägstrich, und jedes / "segment" gleicht ein wörtliches Pfadsegment ab.

Der Pfeil -> trennt die HTTP-Methode vom Pfad. Daher gleicht GET -> Root / "users" GET /users ab.

HttpRoutes.of[IO] {
  case GET -> Root / "users" => Ok("all users")
  case GET -> Root / "users" / "me" => Ok("current user")
}

Pfadvariablen

Ein ungebundener Bezeichner in Kleinbuchstaben erfasst in einem Pfad dieses Segment als String. Hier bindet id den Wert, der nach /users/ steht.

Erfasste Segmente sind immer Strings. Sie können sie selbst in umfangreichere Typen parsen oder die anschließend gezeigten Extractor-Objekte verwenden.

HttpRoutes.of[IO] {
  case GET -> Root / "users" / id =>
    Ok(s"user $id")
}

Typisierte Pfad-Extractor

http4s enthält Extractor wie IntVar und LongVar, die nur dann zutreffen, wenn sich das Segment in den jeweiligen Typ parsen lässt. Ein nicht numerisches Segment wird an den nächsten Fall weitergereicht.

Mit einem unapply können Sie benutzerdefinierte Extractor für Domänentypen wie UUIDs definieren.

HttpRoutes.of[IO] {
  case GET -> Root / "users" / IntVar(id) =>
    Ok(s"numeric user $id")
}

Methoden abgleichen

Der Methoden-Extractor vor -> kann GET, POST, PUT, DELETE, PATCH oder eine andere Methode sein. Derselbe Pfad mit unterschiedlichen Methoden wird zu separaten Fällen.

Wenn ein Pfad, aber nicht die Methode zutrifft, antwortet http4s automatisch mit 405 Method Not Allowed.

HttpRoutes.of[IO] {
  case GET -> Root / "items" => Ok("list")
  case POST -> Root / "items" => Created("made")
  case DELETE -> Root / "items" / IntVar(i) => NoContent()
}

Routen kombinieren

Da HttpRoutes[F] ein SemigroupK bildet, kombinieren Sie mehrere Routengruppen mit dem Operator <+>. Die erste Gruppe, die eine Antwort erzeugt, gewinnt.

So können Sie Routen nach Funktionen in separate Werte aufteilen und an einer Stelle zusammenführen.

import cats.syntax.semigroupk._

val all = userRoutes <+> itemRoutes <+> healthRoutes

Von Routen zu HttpApp

Ein Server benötigt eine totale statt einer partiellen Funktion. HttpRoutes[F] wird mit .orNotFound in HttpApp[F] umgewandelt, das 404 liefert, wenn keine Route zutrifft.

HttpApp[F] ist Kleisli[F, Request[F], Response[F]] und gibt immer eine Antwort zurück.

import org.http4s.HttpApp

val app: HttpApp[IO] = routes.orNotFound

Middleware umhüllen

Middleware sind Funktionen HttpRoutes[F] => HttpRoutes[F] (oder für HttpApp). Sie umhüllen einen Dienst und fügen Protokollierung, CORS, gzip oder Authentifizierung hinzu, ohne die Routenlogik anzutasten.

Integrierte Beispiele sind Logger, CORS und GZip aus org.http4s.server.middleware.

import org.http4s.server.middleware.Logger

val logged = Logger.httpApp(logHeaders = true, logBody = false)(app)

Query-Parameter in Routen

Query-Parameter werden mit Matcher-Objekten abgeglichen, die QueryParamDecoderMatcher erweitern. Sie erscheinen nach einem :? im Pfadmuster.

Verwenden Sie OptionalQueryParamDecoderMatcher für möglicherweise fehlende Parameter; das Ergebnis ist ein Option.

object NameParam extends QueryParamDecoderMatcher[String]("name")

HttpRoutes.of[IO] {
  case GET -> Root / "hi" :? NameParam(n) => Ok(s"hi $n")
}

Kurzer Test

Testen Sie Ihr Verständnis der Routenzusammensetzung.

Zusammenfassung

Sie haben Routen mit HttpRoutes.of und der DSL erstellt, Methoden und Pfade abgeglichen, Variablen mit IntVar und Matchern erfasst und Gruppen mit <+> kombiniert.

Routen sind partiell; .orNotFound macht daraus eine totale HttpApp, und Middleware umhüllt Dienste für übergreifende Belange.

Häufig gestellte Fragen

Ist die Lektion „Routen und HttpRoutes“ kostenlos?

Ja — der vollständige Text von „Routen und HttpRoutes“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Scala for Backend Engineering & Functional Programming-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Scala for Backend Engineering & Functional Programming-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Routen und HttpRoutes“?

Definieren Sie Endpunkte funktional. Du übst Scala for Backend Engineering & Functional Programming mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Scala for Backend Engineering & Functional Programming zu starten?

Keine Vorkenntnisse erforderlich. Scala for Backend Engineering & Functional Programming auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „Routen und HttpRoutes“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Scala for Backend Engineering & Functional Programming-Lektion Code schreiben und ausführen?

Ja. Jede Scala for Backend Engineering & Functional Programming-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Routen und HttpRoutes
  2. Requests und Responses
  3. JSON-Endpunkte
  4. Die Anwendung bereitstellen
← Zurück zu Scala for Backend Engineering & Functional Programming