Como usar ReponseCaching en Web APIs con .NET Core

ResponseCaching es una técnica que nos permite guarda en caché una respuesta de un request y que de esta manera responsa mucho rápido a la vez que no consuma ningún tipo de recurso en el servidor.

¿Cuando usarlo?, Debemos tener en cuenta que realizar esta configuración va causar que los datos que se devuelvan no sean los actuales o reales y si tenemos datos calculados de variables externas o que dependa de la fecha tendríamos un problema de manipulación de datos. Lo ideal es usarla cuando tenemos Endpoints que devuelven datos que no cambian mucho en el tiempo o que traes datos de archivos de configuración o parámetros generales.

Lo primero que debemos hacer para usarlo es configurar el servicio:

Dentro de Startup.cs en el método ConfigureServices vamos agregar el servicio para ResponseCaching:

services.AddResponseCaching();

Luego agregamos el middleware para poder interceptar los request y devolver de cache aquellos que tengan el atributo

app.UseResponseCaching();

Por último vamos agregar el atributo [ResponseCache] a los endpoint que queremos que manejen caché, especificando en la propiedad Duration (en segundos) cuanto tiempo estará la información en caché.

[HttpGet]
[ResponseCache(Duration=60)]
public ActionResult<IEnumerable<Category>> Get()
{
    return context.Categories;
}

Para realizar la prueba en postman es necesario ir a los settings y desactivar el no-cache header en la opción (Send no-cache header)

También puedes crear perfiles para manejar el cache de la misma forma en diferentes lugares, revisa el siguiente enlace:

https://docs.microsoft.com/en-us/aspnet/core/performance/caching/response?view=aspnetcore-5.0

Este es un ejemplo:

Tiempo de respuesta de 35ms
Con ResponseCaching disminuye a 4ms