Ir para o conteúdo

Roteamento

Roteamento

O Roteamento é o mecanismo pelo qual as requisições são direcionadas para o código que as trata. Para obter uma introdução a roteamento, consulte Roteamento básico.

O código a seguir é um exemplo de uma rota muito básica.

uses Horse;

begin
  THorse.Get('/ping',
    procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)
    begin
      Res.Send('pong');
    end);

  THorse.Listen(9000);
end.

Métodos de roteamento

Um método de roteamento é derivado a partir de um dos métodos HTTP, e é anexado a uma procedure que irá tratar esta requisição.

o código a seguir é um exemplo de rotas para a raiz do aplicativo que estão definidas para os métodos GET e POST.

uses Horse;

begin
  THorse.Get('/',
    procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)
    begin
      Res.Send('GET request to the root');
    end);

  THorse.Post('/',
    procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)
    begin
      Res.Send('POST request to the root');
    end)

  THorse.Listen(9000);
end.

O Horse suporta os seguintes métodos de roteamento que correspondem aos métodos HTTP: GET, POST, PUT, PATCH, HEAD, DELETE.

Existe um método de roteamento especial, THorse.All, que não é derivado de nenhum método HTTP. Este método é usado para carregar procedures em um caminho para todos os métodos de solicitação.

No exemplo a seguir, o manipulador irá ser executado para solicitações para “/test” se você estiver usando GET, POST, PUT, DELETE, ou qualquer outro método de solicitação HTTP que é suportado pelo Horse.

  THorse.All('/test',
    procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)
    begin
      Res.Send('Test Response');
    end);

Métodos de resposta

Os métodos do objeto de resposta (res) na seguinte tabela podem enviar uma resposta ao cliente, e finalizar o ciclo solicitação-resposta.

Método Descrição
Res.Download(AFileName) Solicita que seja efetuado o download de um arquivo
Res.RedirectTo(ALocation) Redireciona uma solicitação
Res.SendFile(AFileName) Envia um arquivo
Res.Send(AContent) Envia uma string
Res.Send<T: class> Envia um objeto
Res.Status(AStatus) Configura o código do status de resposta
Res.ContentType(AContentType) Configura o ContentType da resposta