No Salvo, os dados da solicitação do usuário podem ser obtidos através da estrutura Request
:
Request é uma estrutura que representa uma solicitação HTTP, oferecendo funcionalidades abrangentes para processamento de solicitações:
Os parâmetros de consulta podem ser obtidos com get_query
:
Os dados de formulário podem ser obtidos com get_form
, que é uma função assíncrona:
O Request
oferece vários métodos para analisar esses dados em estruturas fortemente tipadas.
parse_params
: Analisa os parâmetros da rota para um tipo específico;parse_queries
: Analisa os parâmetros da URL para um tipo específico;parse_headers
: Analisa os cabeçalhos HTTP para um tipo específico;parse_json
: Analisa o corpo da solicitação como JSON para um tipo específico;parse_form
: Analisa o corpo da solicitação como formulário para um tipo específico;parse_body
: Analisa o corpo da solicitação com base no content-type
;extract
: Combina diferentes fontes de dados para extrair um tipo específico.Aqui, um serde::Deserializer
personalizado converte dados como HashMap<String, String>
e HashMap<String, Vec<String>>
em tipos específicos.
Por exemplo: URL queries
são extraídos como um tipo MultiMap, que pode ser visto como uma estrutura similar a HashMap<String, Vec<String>>
. Se a URL for http://localhost/users?id=123&id=234
e o tipo alvo for:
O primeiro id=123
será analisado, enquanto id=234
será descartado:
Se o tipo for:
Ambos id=123
e id=234
serão analisados:
O framework inclui extratores de parâmetros de solicitação que simplificam o código de processamento de solicitações HTTP.
Para usar, adicione o recurso "oapi"
no seu Cargo.toml
:
Então você pode importar os extratores:
Extrai dados JSON do corpo da solicitação e os desserializa em um tipo específico.
Extrai dados de formulário do corpo da solicitação e os desserializa em um tipo específico.
Extrai um valor específico dos cookies da solicitação.
Extrai um valor específico dos cabeçalhos da solicitação.
Extrai parâmetros do caminho da URL.
Extrai parâmetros da string de consulta da URL.
É possível combinar múltiplas fontes de dados para extrair um tipo específico. Primeiro, defina um tipo personalizado:
No Handler
, os dados podem ser obtidos assim:
Ou até mesmo passar o tipo diretamente como parâmetro da função:
A definição do tipo de dados é bastante flexível, permitindo até estruturas aninhadas:
Para um exemplo completo, veja: extract-nested.
#[salvo(extract(flatten))]
VS#[serde(flatten)]
Se no exemplo acima Nested<'a>
não tiver campos em comum com o pai, pode usar #[serde(flatten)]
, caso contrário, use #[salvo(extract(flatten))]
.
#[salvo(extract(source(parse)))]
Também é possível adicionar um parâmetro parse
ao source
para especificar um método de análise particular. Se não especificado, a análise será baseada nas informações da Request
: formulários serão analisados como MuiltMap
, e payloads JSON como JSON. Normalmente, não é necessário especificar este parâmetro, exceto em casos específicos.
Por exemplo, se a solicitação enviar um formulário, mas um campo contiver texto JSON, parse
pode ser usado para analisar esse texto como JSON.
Para a lista mais recente e detalhada, consulte a documentação da API.
Categoria | Método | Descrição |
---|---|---|
Informações da Solicitação | uri()/uri_mut()/set_uri() | Operações de URI |
method()/method_mut() | Operações de método HTTP | |
version()/version_mut() | Operações de versão HTTP | |
scheme()/scheme_mut() | Operações de esquema | |
remote_addr()/local_addr() | Informações de endereço | |
Cabeçalhos | headers()/headers_mut() | Obter todos os cabeçalhos |
header<T>()/try_header<T>() | Obter e analisar cabeçalho específico | |
add_header() | Adicionar cabeçalho | |
content_type()/accept() | Obter tipo de conteúdo/tipo aceito | |
Parâmetros | params()/param<T>() | Operações de parâmetros de caminho |
queries()/query<T>() | Operações de parâmetros de consulta | |
form<T>()/form_or_query<T>() | Operações de dados de formulário | |
Corpo da Solicitação | body()/body_mut() | Obter corpo da solicitação |
replace_body()/take_body() | Modificar/extrair corpo | |
payload()/payload_with_max_size() | Obter dados brutos | |
Arquivos | file()/files()/all_files() | Obter arquivos enviados |
first_file() | Obter primeiro arquivo | |
Análise de Dados | extract<T>() | Extração unificada de dados |
parse_json<T>()/parse_form<T>() | Análise de JSON/formulário | |
parse_body<T>() | Análise inteligente do corpo | |
parse_params<T>()/parse_queries<T>() | Análise de parâmetros/consultas | |
Funcionalidades Especiais | cookies()/cookie() | Operações de cookies (requer recurso cookie) |
extensions()/extensions_mut() | Armazenamento de dados de extensão | |
set_secure_max_size() | Definir limite de tamanho seguro | |
{/* 本行由工具自动生成,原文哈希值:6b654f79df08ba1dc5cc1c070780def0 */} |