Als Anfänger stellte ich fest, dass ich zu unbeholfen war, um Frameworks wie actix-web oder Rocket zu erlernen. Als ich meine früheren Go-Webdienste mit Rust neu implementieren wollte, schien jedes Framework auf den ersten Blick komplexer zu sein als die bestehenden Go-Frameworks. Die Lernkurve von Rust ist bereits steil genug – warum sollten Webframeworks zusätzlich so kompliziert sein?
Als Tokio das Axum-Framework veröffentlichte, war ich froh zu glauben, ich müsste mein eigenes Webframework nicht mehr pflegen. Doch die Realität zeigte, dass Axum zwar einfach aussieht, aber in der Praxis erfordert es fortgeschrittene Rust-Kenntnisse und mühsame Template-Arbeit, um selbst einfache Middleware zu schreiben.
Daher entschied ich mich, mein eigenes, besonderes Framework weiterzuentwickeln – eines, das intuitiv, funktionsreich und für Anfänger geeignet ist.
Salvo ist einfach, aber dennoch umfassend und leistungsfähig. Es gilt als eines der stärksten Frameworks in der Rust-Welt, bleibt dabei aber leicht zu erlernen und zu nutzen – ohne schmerzhafte Kompromisse.
Viele Low-Level-Funktionen sind bereits in Hyper implementiert, daher baut Salvo darauf auf. Sein Kern besteht aus einem leistungsstarken Routingsystem und gängigen Features wie ACME, OpenAPI und JWT-Authentifizierung.
In Salvo sind Handler und Middleware vereinheitlicht: Middleware ist Handler und wird über hoop
zum Router hinzugefügt. Beide verarbeiten Requests und können Responses schreiben. Ein Handler empfängt drei Parameter:
Request
: Die AnfragedatenDepot
: Temporärer Speicher während der VerarbeitungResponse
: Die AusgabeFür einfachen Code können überflüssige Parameter weggelassen oder in beliebiger Reihenfolge angegeben werden:
Das Routing-API ist minimalistisch, aber mächtig. Meist genügt der Typ Router
.
Salvo kann außerdem automatisch OpenAPI-Dokumentation generieren, Parameter extrahieren und Fehler behandeln – wie in diesem Beispiel:
Hier wird input
automatisch aus dem JSON-Request geparst (auch für komplexe Typen), und #[endpoint]
generiert die OpenAPI-Dokumentation.
Salvos Routing unterscheidet sich von anderen Frameworks: Router können flach oder baumartig strukturiert sein – je nach Logik, nicht zwingend nach URL-Pfaden.
Normales Routing:
Oft erfordern nur bestimmte Routen Authentifizierung. Salvo ermöglicht dies durch verschachtelte Router:
Beide Router können unter einem Eltern-Router kombiniert werden:
Mit {id:/\d+/}
lässt sich die ID zudem per Regex validieren.