In Salvo, i dati della richiesta dell'utente possono essere ottenuti tramite Request
:
Request è una struttura che rappresenta una richiesta HTTP, fornendo funzionalità complete per la gestione delle richieste:
È possibile ottenere i parametri della query con get_query
:
È possibile ottenere i dati del form con get_form
, questa funzione è asincrona:
Request
fornisce diversi metodi per analizzare questi dati in strutture fortemente tipizzate.
parse_params
: analizza i parametri del router in un tipo di dato specifico;parse_queries
: analizza le query dell'URL in un tipo di dato specifico;parse_headers
: analizza gli header HTTP in un tipo di dato specifico;parse_json
: analizza il corpo della richiesta HTTP come JSON in un tipo specifico;parse_form
: analizza il corpo della richiesta HTTP come form in un tipo specifico;parse_body
: analizza il corpo della richiesta HTTP in base al content-type
in un tipo specifico;extract
: può combinare diverse fonti di dati per analizzarle in un tipo specifico.Qui, utilizzando un serde::Deserializer
personalizzato, i dati simili a HashMap<String, String>
e HashMap<String, Vec<String>>
vengono estratti in tipi di dati specifici.
Ad esempio: le URL queries
vengono effettivamente estratte come tipo MultiMap, che può essere considerato simile a una struttura dati HashMap<String, Vec<String>>
. Se l'URL della richiesta è http://localhost/users?id=123&id=234
, il tipo di destinazione fornito è:
Il primo id=123
verrà analizzato, mentre id=234
verrà scartato:
Se il tipo fornito è:
Allora id=123&id=234
verranno entrambi analizzati:
Il framework include estrattori di parametri integrati. Questi estrattori possono semplificare notevolmente il codice per la gestione delle richieste HTTP.
Per utilizzarli, è necessario aggiungere la feature "oapi"
nel tuo Cargo.toml
Quindi puoi importare gli estrattori:
Utilizzato per estrarre dati JSON dal corpo della richiesta e deserializzarli in un tipo specifico.
Estrae dati dal form nel corpo della richiesta e li deserializza in un tipo specifico.
Estrae un valore specifico dai cookie della richiesta.
Estrae un valore specifico dagli header della richiesta.
Estrae parametri dal percorso dell'URL.
Estrae parametri dalla stringa di query dell'URL.
È possibile combinare più fonti di dati per analizzarle in un tipo specifico. Prima definisci un tipo personalizzato, ad esempio:
Quindi, nell'Handler
, puoi ottenere i dati così:
O addirittura puoi passare direttamente il tipo come parametro alla funzione, così:
La definizione del tipo di dati è molto flessibile, permettendo anche strutture nidificate:
Per un esempio concreto, vedi: extract-nested.
#[salvo(extract(flatten))]
VS#[serde(flatten)]
Se nel precedente esempio Nested<'a> non ha campi in comune con il genitore, puoi usare #[serde(flatten)]
, altrimenti devi usare #[salvo(extract(flatten))]
.
#[salvo(extract(source(parse)))]
In realtà, puoi anche aggiungere un parametro parse
a source
per specificare un metodo di analisi particolare. Se questo parametro non è specificato, l'analisi sarà determinata dalle informazioni della Request
: se il Body
è un form, verrà analizzato come MuiltMap
, se è un payload JSON, verrà analizzato come JSON. Generalmente non è necessario specificare questo parametro, ma in casi particolari può essere utile per funzionalità speciali.
Ad esempio, qui la richiesta effettiva invia un Form, ma il valore di un campo è una stringa JSON. In questo caso, specificando parse
, la stringa può essere analizzata come JSON.
Categoria | Metodo | Descrizione |
---|---|---|
Informazioni sulla richiesta | uri()/uri_mut()/set_uri() | Operazioni sull'URI |
method()/method_mut() | Operazioni sul metodo HTTP | |
version()/version_mut() | Operazioni sulla versione HTTP | |
scheme()/scheme_mut() | Operazioni sullo schema del protocollo | |
remote_addr()/local_addr() | Informazioni sull'indirizzo | |
Header della richiesta | headers()/headers_mut() | Ottieni tutti gli header |
header<T>()/try_header<T>() | Ottieni e analizza un header specifico | |
add_header() | Aggiungi un header | |
content_type()/accept() | Ottieni il tipo di contenuto/tipo accettato | |
Gestione dei parametri | params()/param<T>() | Operazioni sui parametri del percorso |
queries()/query<T>() | Operazioni sui parametri della query | |
form<T>()/form_or_query<T>() | Operazioni sui dati del form | |
Corpo della richiesta | body()/body_mut() | Ottieni il corpo della richiesta |
replace_body()/take_body() | Modifica/estrai il corpo della richiesta | |
payload()/payload_with_max_size() | Ottieni i dati grezzi | |
Gestione dei file | file()/files()/all_files() | Ottieni i file caricati |
first_file() | Ottieni il primo file | |
Analisi dei dati | extract<T>() | Estrazione unificata dei dati |
parse_json<T>()/parse_form<T>() | Analizza JSON/form | |
parse_body<T>() | Analisi intelligente del corpo della richiesta | |
parse_params<T>()/parse_queries<T>() | Analizza parametri/query | |
Funzionalità speciali | cookies()/cookie() | Operazioni sui cookie (richiede la feature cookie) |
extensions()/extensions_mut() | Archiviazione dati estesa | |
set_secure_max_size() | Imposta il limite di dimensione sicura | |
{/* 本行由工具自动生成,原文哈希值:6b654f79df08ba1dc5cc1c070780def0 */} |