Autor de la imagen: yo
YARP (Yet Another Reverse Proxy) es una herramienta de código abierto diseñada para aplicaciones .NET que actúa como un intermediario, redirigiendo las solicitudes de los usuarios a varios servicios en el servidor según reglas y criterios específicos.
Su uso es muy importante en arquitecturas de microservicios, ya que proporciona un punto centralizado para la gestión, el enrutamiento y el equilibrio de las solicitudes entre los diferentes servicios.
Aquí hay una explicación más sencilla de las funciones principales de YARP:
- Redirige las solicitudes entrantes a distintos servicios en el servidor basándose en la ruta de la URL, encabezados u otros atributos.
- Distribuye la carga de trabajo de manera uniforme entre las instancias de los servicios, y admite diferentes estrategias para hacerlo.
- Se integra sin problemas con el middleware de ASP.NET Core, permitiendo personalizar el manejo de las solicitudes y respuestas.
- Asegura que el tráfico solo se envíe a instancias de servicios que estén funcionando correctamente.
- Mantiene las sesiones de los usuarios con servicios específicos cuando es necesario.
YARP ayuda a manejar eficientemente el tráfico de red en aplicaciones complejas, asegurando que las solicitudes de los usuarios lleguen al servicio adecuado de una manera eficiente y confiable, y facilitando la escalabilidad y la disponibilidad de los servicios en la web.
Configurar YARP en tu aplicación .NET Core
Paso 1: Crea una aplicación web .NET Core
dotnet new web -n yarpTest
cd yarpTest
dotnet add package Microsoft.ReverseProxy
Paso 2: Implementa un controller
sing Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("[controller]")]
public class TestController : ControllerBase
{
private readonly ITestService _TestService;
public TestController(ITestService testService) {
_TestService = testService;
}
[HttpGet("{id}")]
public IActionResult GetIntValue (int id)
{
// Your Code
return Ok();
}
}
Paso 3: Configurar YARP
public void ConfigureServices(IServiceCollection services)
{
services.AddReverseProxy()
.LoadFromConfig(Configuration.GetSection("ReverseProxy"));
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapReverseProxy();
});
}
En appsettings.json
debemos definir:
"ReverseProxy": {
"Routes": [
{
"RouteId": "external-get-test",
"ClusterId": "external-test-service",
"Match": {
"Path": "/external-api/test/{id}",
"Methods": [ "GET" ]
}
}
],
"Clusters": {
"external-test-service": {
"Destinations": {
"external-test-service/destination1": {
"Address": "https://externaltestservice.com/"
}
}
}
}
}
"Routes": [
{
"RouteId": "external-get-test",
"ClusterId": "external-test-service",
"Match": {
"Path": "/external-api/test/{id}",
"Methods": [ "GET" ]
},
"Transforms": [
{
"RequestHeader": "X-MyNew-Header",
"Set": "MyNewValue"
}
]
}
]