O que é um Pipeline em C#?

Em programação — especialmente no ASP.NET Core — pipeline é o caminho que uma requisição HTTP percorre dentro da sua aplicação, passando por vários middlewares, um depois do outro

Pensa como um túnel com várias etapas. Cada etapa faz alguma coisa com a requisição (verifica login, registra logs, aplica segurança etc) antes dela chegar no destino final (como um controller ou endpoint).

Analogia simples:

Imagina que um cliente faz um pedido de lanche num drive-thru.

O pipeline seria:
  • O cara da guarita anota o pedido (middleware de log).
  • O caixa confere se ele já pagou (middleware de autenticação).
  • O supervisor vê se ele tem permissão pra pegar brinde (middleware de autorização).
  • O cozinheiro prepara e entrega o lanche (o endpoint final).
Cada pessoa desse caminho é uma etapa do pipeline — ou seja, um middleware.

No ASP.NET Core, o pipeline é montado com esses Use...():

 var builder = WebApplication.CreateBuilder(args);  
 var app = builder.Build();  
 app.UseMiddleware<LogMiddleware>();     // Loga quem acessa  
 app.UseAuthentication();                // Verifica se está logado  
 app.UseAuthorization();                 // Verifica permissões  
 app.UseRouting();                      // Encontra o endpoint certo  
 app.UseEndpoints(endpoints =>  
 {  
   endpoints.MapControllers();      // Executa o controller  
 });  
 app.Run();  
Cada linha acima é uma etapa no pipeline. A requisição vai passando de uma pra outra

Desenho do caminho da requisição no pipeline:


Dicas importantes: 

  • A ordem importa: se você colocar o UseRouting() depois do UseEndpoints(), por exemplo, o endpoint nem será encontrado. 
  • Você pode interromper o pipeline em qualquer etapa (ex: se o token for inválido, o UseAuthentication() já devolve erro 401). 
  • A resposta também passa de volta por esse pipeline (na ordem inversa), então você pode alterar a resposta antes de ela sair.

Resumo curto: 

  • Pipeline é a sequência de middlewares que uma requisição percorre até chegar (e voltar) do seu destino dentro do sistema.

Comentários