Imagen de Maitree Rimthong en Pexel
Análisis de Rendimiento: API Controller vs Minimal API vs FastEndpoints en C#
Al realizar un análisis de rendimiento de diferentes enfoques para construir APIs en C#, he ejecutado benchmarks utilizando tres implementaciones: API Controller, Minimal API y FastEndpoints.
Los resultados se basan en dos conjuntos de iteraciones: 10 y 20.
A continuación, os presento una tabla con los datos obtenidos:
Method | IterationCount | Mean | Ratio |
---|---|---|---|
TestRestAPIControllerAsync | 10 | 8.369 ms | 1.091 |
TestRestAPIMinimalAsync | 10 | 7.671 ms | 1.000 |
TestRestAPIFastEndpointAsync | 10 | 7.707 ms | 1.005 |
TestRestAPIControllerAsync | 20 | 14.284 ms | 1.011 |
TestRestAPIMinimalAsync | 20 | 14.122 ms | 1.000 |
TestRestAPIFastEndpointAsync | 20 | 14.270 ms | 1.010 |
Los resultados indican que Minimal API y FastEndpoints tienen tiempos de respuesta muy similares, con una ligera ventaja para Minimal API en ambos casos. API Controller, aunque no es significativamente más lento, muestra un pequeño incremento en el tiempo promedio de ejecución.
¿Qué Enfoque Deberías Usar?
- Minimal API:
- Ideal para proyectos nuevos o equipos con menos experiencia, ya que ofrece una sintaxis más sencilla y tiempos de respuesta rápidos.
- Es perfecto si buscas implementar rápidamente una API ligera y eficiente.
- API Controller:
- Recomendado si ya tienes un código base existente en el que se utilizan controladores estándar.
- Es una buena opción para equipos que ya están familiarizados con el patrón MVC y no desean cambiar su flujo de trabajo.
- Ofrece una estructura más robusta y escalable para proyectos grandes y complejos.
- FastEndpoints:
- Aunque ofrece una ligera mejora en el rendimiento, se desvía del estándar de .NET y puede no ser la mejor opción para producción.
- La velocidad de resolución de problemas y el soporte técnico de FastEndpoints no se compara con el que Microsoft puede proporcionar para sus tecnologías estándar.
- Sin embargo, puede ser una buena opción para proyectos personales o si estás interesado en aprender nuevas tecnologías.
Pero no solo me quedo aquí, vamos a probar con Azure Load Testing.
Segun FastEndpoint (https://fast-endpoints.com/benchmarks#head-to-head-benchmark) los tiempos son mucho mejores que .NET (Controller y Minimal API), sí, eso podía ser en .NET7 como veis en la web, no lo voy a poner en duda… aunque ya veis que en los anteriores ejemplos de .NET8 esto no es así, veamos que ocurre con .NET8 en todos:
Ahora veamos que ocurre con en Azure Load Testing.
Con esta infromación de partida:
- Number of Threads (users): 100
- Ramp-up period (seconds) : 1
- Loop Count : 100
Obtenemos:
Y con esta otra:
- Number of Threads (users): 100
- Ramp-up period (seconds) : 1
- Loop Count : Infinite
- Duration (seconds): 300
- Starup delay (seconds): 1
Obtenemos:
Pon en duda todo
No te fíes ciegamente de los resultados de pruebas que no puedas verificar por ti mismo. Te animo a descargar todo lo que te he proporcionado en el ejemplo y ponerlo en práctica por ti mismo. De esta manera, podrás validar los resultados y obtener conclusiones basadas en tu propio entorno y requisitos.
Mis conclusiones «personales» en base a datos feacientes.
Después de analizar los resultados, he llegado a algunas conclusiones personales. A largo plazo, FastEndpoints sufre una degradación en el rendimiento de los servicios, algo que no ocurre con API Controller. Además, aunque la forma de trabajar con FastEndpoints es similar a la de Minimal API, al final no obtenemos ninguna ventaja significativa. En realidad, optar por FastEndpoints puede ser una jugada muy mala.
Por otro lado, Minimal API resulta ser una excelente elección. Sus resultados se mantienen constantes y muestran un rendimiento muy bueno, dejando en evidencia las limitaciones de FastEndpoints. Minimal API no solo es eficiente, sino que también es fácil de implementar, lo que la convierte en una opción sólida para proyectos nuevos o equipos con menos experiencia.
Migrar de Controllers a Minimal API
La decisión de migrar de API Controllers a Minimal API dependerá de varios factores, incluyendo la complejidad del proyecto y la familiaridad del equipo con los diferentes enfoques. Sin embargo, los datos obtenidos refuerzan la idea de que esta migración puede ser beneficiosa. Minimal API ofrece un rendimiento constante y robusto que podría justificar el esfuerzo de la migración en muchos casos.
Resumen
Si buscas una opción eficiente y fácil de implementar, Minimal API es una excelente elección. Evita FastEndpoints para aplicaciones de producción debido a su degradación de rendimiento a largo plazo y considera cuidadosamente los factores antes de migrar de API Controllers a Minimal API, aunque los datos sugieren que podría ser una jugada inteligente.