In Salvo können Benutzeranfragedaten über Request
abgerufen werden:
Request ist eine Struktur, die eine HTTP-Anfrage darstellt und umfassende Funktionen zur Anfrageverarbeitung bietet:
Abfrageparameter können mit get_query
abgerufen werden:
Formulardaten können mit get_form
abgerufen werden, diese Funktion ist asynchron:
Request
bietet mehrere Methoden, um diese Daten in stark typisierte Strukturen zu parsen.
parse_params
: Parst die Router-Parameter der Anfrage in einen bestimmten Datentyp;parse_queries
: Parst die URL-Abfragen der Anfrage in einen bestimmten Datentyp;parse_headers
: Parst die HTTP-Header der Anfrage in einen bestimmten Datentyp;parse_json
: Parst die Daten des HTTP-Body-Teils der Anfrage als JSON in einen bestimmten Typ;parse_form
: Parst die Daten des HTTP-Body-Teils der Anfrage als Formular in einen bestimmten Typ;parse_body
: Parst die Daten des HTTP-Body-Teils der Anfrage basierend auf dem content-type
in einen bestimmten Typ;extract
: Kann verschiedene Datenquellen kombinieren, um einen bestimmten Typ zu extrahieren.Hier werden Daten wie HashMap<String, String>
und HashMap<String, Vec<String>>
mithilfe eines benutzerdefinierten serde::Deserializer
in bestimmte Datentypen extrahiert.
Zum Beispiel: URL queries
werden tatsächlich als MultiMap-Typ extrahiert, der als ähnlich zu HashMap<String, Vec<String>>
betrachtet werden kann. Wenn die angeforderte URL http://localhost/users?id=123&id=234
ist und der Zieltyp:
dann wird das erste id=123
geparst, während id=234
verworfen wird:
Wenn der bereitgestellte Typ jedoch:
dann werden sowohl id=123
als auch id=234
geparst:
Das Framework bietet integrierte Extraktoren für Anfrageparameter. Diese Extraktoren können den Code zur Verarbeitung von HTTP-Anfragen erheblich vereinfachen.
Um die Extraktoren zu verwenden, müssen Sie das Feature "oapi"
in Ihrer Cargo.toml
hinzufügen:
Dann können Sie die Extraktoren importieren:
Extrahiert JSON-Daten aus dem Anfragekörper und deserialisiert sie in einen bestimmten Typ.
Extrahiert Formulardaten aus dem Anfragekörper und deserialisiert sie in einen bestimmten Typ.
Extrahiert einen bestimmten Wert aus den Cookies der Anfrage.
Extrahiert einen bestimmten Wert aus den Headern der Anfrage.
Extrahiert Parameter aus dem URL-Pfad.
Extrahiert Parameter aus der URL-Abfragezeichenfolge.
Sie können mehrere Datenquellen kombinieren, um einen bestimmten Typ zu extrahieren. Definieren Sie zunächst einen benutzerdefinierten Typ, z.B.:
Dann können Sie die Daten im Handler
wie folgt abrufen:
Oder Sie können den Typ direkt als Parameter an die Funktion übergeben:
Die Definition von Datentypen ist sehr flexibel und kann sogar verschachtelte Strukturen parsen:
Ein konkretes Beispiel finden Sie unter: extract-nested.
#[salvo(extract(flatten))]
VS#[serde(flatten)]
Wenn im obigen Beispiel Nested<'a> keine Felder hat, die mit den übergeordneten Feldern übereinstimmen, können Sie #[serde(flatten)]
verwenden, andernfalls müssen Sie #[salvo(extract(flatten))]
verwenden.
#[salvo(extract(source(parse)))]
Sie können dem source
auch einen parse
-Parameter hinzufügen, um eine bestimmte Parsing-Methode anzugeben. Wenn dieser Parameter nicht angegeben wird, entscheidet das Parsing basierend auf den Informationen der Request
, ob der Body
-Teil als MuiltMap
oder als JSON geparst wird. In den meisten Fällen ist dieser Parameter nicht erforderlich, aber in seltenen Fällen kann er spezielle Funktionen ermöglichen.
Hier wird beispielsweise ein Formular gesendet, aber ein Feld enthält einen JSON-Text. Durch Angabe von parse
kann dieser String als JSON geparst werden.
Kategorie | Methode | Beschreibung |
---|---|---|
Anfrageinformation | uri()/uri_mut()/set_uri() | URI-Operationen |
method()/method_mut() | HTTP-Methodenoperationen | |
version()/version_mut() | HTTP-Versionsoperationen | |
scheme()/scheme_mut() | Protokollschemenoperationen | |
remote_addr()/local_addr() | Adressinformationen | |
Anfrageheader | headers()/headers_mut() | Alle Anfrageheader abrufen |
header<T>()/try_header<T>() | Bestimmten Header abrufen und parsen | |
add_header() | Header hinzufügen | |
content_type()/accept() | Inhaltstyp/Akzeptanztyp abrufen | |
Parameterverarbeitung | params()/param<T>() | Pfadparameteroperationen |
queries()/query<T>() | Abfrageparameteroperationen | |
form<T>()/form_or_query<T>() | Formulardatenoperationen | |
Anfragekörper | body()/body_mut() | Anfragekörper abrufen |
replace_body()/take_body() | Anfragekörper ändern/extrahiere | |
payload()/payload_with_max_size() | Rohdaten abrufen | |
Dateiverarbeitung | file()/files()/all_files() | Hochgeladene Dateien abrufen |
first_file() | Erste Datei abrufen | |
Datenanalyse | extract<T>() | Einheitliche Datenextraktion |
parse_json<T>()/parse_form<T>() | JSON/Formular parsen | |
parse_body<T>() | Intelligentes Parsen des Anfragekörpers | |
parse_params<T>()/parse_queries<T>() | Parameter/Abfragen parsen | |
Spezielle Funktionen | cookies()/cookie() | Cookie-Operationen (erfordert cookie-Feature) |
extensions()/extensions_mut() | Erweiterte Datenspeicherung | |
set_secure_max_size() | Sicherheitsgrößenbeschränkung festlegen |