Fluxo de Processamento
O Service primeiro converte a requisição em Response do Salvo e, em seguida, entra na fase de correspondência de rotas.
Fase de Correspondência de Rotas
A correspondência de rotas executa os filtros na ordem em que foram adicionados, procedendo de fora para dentro e de cima para baixo. Se qualquer filtro falhar, a correspondência é considerada malsucedida.
Durante o processo de correspondência, as informações do caminho da requisição são consumidas progressivamente. Uma vez que um filtro de caminho corresponde com sucesso, ele consome a parte correspondente do caminho. Quando todos os segmentos do caminho são consumidos, nenhum filtro falha ao longo da cadeia de correspondência e o último Router na cadeia atual possui um Handler de goal, a correspondência é bem-sucedida e a fase de correspondência termina. Todos os Handlers coletados da cadeia de correspondência prosseguem para a fase de execução.
Se o caminho não for totalmente consumido, nenhum erro ocorrer ao longo da cadeia, mas não houver mais rotas filhas para continuar a correspondência, a cadeia atual é considerada uma falha de correspondência e o processo passa para a próxima rota para correspondência.
Se todas as rotas forem correspondidas sem sucesso, o processo entra na fase de captura de erros.
Fase de Execução do Handler
Os Handlers coletados durante a fase de correspondência são executados sequencialmente. Durante a execução, o middleware anterior pode chamar ctrl::call_next() para permitir que o middleware subsequente execute primeiro antes de executar sua própria lógica. Se ocorrer um código de status de erro ou um redirecionamento durante a execução, os Handlers subsequentes não serão executados. Se o código de status indicar um erro e o Body da Response não estiver definido ou for ResBody::Error, o processo entra na fase de captura de erros; caso contrário, ele pula a fase de captura.
Fase de Captura de Erros
Catcher é um tipo usado para lidar com erros e também pode incluir middleware (hoops). Os erros passam por todos os Handlers dentro do Catcher sequencialmente. Se um Handler já tiver tratado o erro e não quiser que os Handlers subsequentes continuem, ele pode pular o restante usando ctrl.skip_rest(), terminando diretamente a fase de captura.
Catcher deve incluir pelo menos um Handler como o manipulador de erros padrão. O padrão é DefaultGoal, mas você pode personalizar totalmente seu próprio Handler como a implementação padrão de tratamento de erros. Ele exibe informações de erro no formato solicitado pelo cabeçalho content-type, suportando os formatos json, xml, text e html. DefaultGoal também fornece configurações de exibição; por exemplo, por padrão, ele exibe links relacionados ao Salvo ao mostrar o formato HTML. Você pode chamar DefaultGoal::footer ou DefaultGoal::with_footer para definir um rodapé personalizado conforme desejado.
O Service converte a Response do Salvo no tipo Response do Hyper, que é finalmente retornado aos clientes, como navegadores.
Ciclo de Vida da Requisição no Salvo
Esta é uma representação visual e explicação do ciclo de vida da requisição HTTP no framework web Salvo.