Você está na página 1de 4

Utilizando cache no ASP.

NET Web API

por Thiago da Silva Adriano

Neste artigo veremos como adicionar um mecanismo de cache em


uma aplicao ASP.NET Web API, melhorando a performance e
poupando recursos da aplicao.

Motivao
A utilizao de cache em aplicaes web tem se tornado uma prtica
cada dia mais comum, pois auxilia na garantia de melhor performance
e economia dos recursos do servidor. Esse tipo de soluo funciona
da seguinte forma: aps a primeira requisio, os dados retornados
pelo servidor so armazenados em um mecanismo auxiliar; a partir
da, novas requisies ao mesmo recurso sero respondidas com os
dados armazenados (em cache), evitando que um novo
processamento seja realizado para retornar a resposta adequada.
Aps um determinado tempo, uma nova requisio feita ao servidor,
atualizando os dados em cache por mais um perodo.
Para auxiliar na implementao desse tipo de funcionalidade, existem
no mercado diversos servios pagos, como Akamai e Edgecast, que
armazenam os nossos dados por um perodo de tempo em uma CDN
(Content Delivery Network). Quando o tempo de cache expirado,

eles acessam os nossos dados novamente para atualizar o cache.


Assim, eles conseguem diminuir as requisies nossa aplicao,
respondendo com um valor padro durante certos perodos. Porm,
apesar de serem excelentes solues, o custo desses servios muitas
vezes no suportado pelos projetos que necessitam de um
mecanismo de cache.
Uma soluo de baixo custo, ento, a implementao do cache na
prpria aplicao utilizando bibliotecas com essa finalidade. Para os
projetos desenvolvidos em ASP.NET, por exemplo, podemos utilizar a
biblioteca Strathweb.CacheOutput.WebApi2. Para compreender
seu uso, veremos nesse artigo um exemplo de uso em uma aplicao
Web API.

Passo 1: Criar o projeto


O primeiro passo aqui ser a criao de um novo projeto. Para isso,
v em File > New > Project e na categoria Web, selecione ASP .NET
Web Application. Na tela seguinte, escolha o template Web API e
clique em OK.
Quando o projeto for criado, clique com o boto direito sobre ele e
adicione um novo controller utilizando o template Web API 2 Controller
- Empty, que nesse exemplo ser chamado de HorarioController.
Agora, precisamos importar a
biblioteca Strathweb.CacheOutput.WebApi2 para o nosso

projeto. Isso pode ser feito executando o seguinte comando na


aba Package Manager Console(console do NuGet) do Visual Studio:
Install-Package Strathweb.CacheOutput.WebApi2

Passo 2: Configurar o cache


O prximo passo ser a configurao do cache, que nesse caso
atuar em um mtodo Get() que retorna apenas um valor DateTime
com a data e hora atuais. A Listagem 1 demonstra essa
implementao.
01 using System;
02 using System.Web.Http;
03 using WebApi.OutputCache.V2;
04
05 namespace WebApiCache.Controllers
06{
07
public class HorarioController : ApiController
08
{
09
[CacheOutput(ServerTimeSpan = 120)]
10
string Get() { return DateTime.Now.ToString();
11
}
12}

Listagem 1. CacheOutput
Linha 03: Adicionamos o namespace WebApi.OutputCache;

Linha 09: Configuramos o cache desse mtodo para manter os dados durante 120 segundos antes de
obter novamente os dados atualizados.

Com essa implementao, aps o primeiro usurio executar uma


requisio a esse mtodo, ele e os prximos iro receber um contedo
mantido em cache por um perodo de dois minutos. Encerrado esse
tempo, nossa aplicao ir renovar os dados, retornando novamente a
hora atual.

A Figura 1 demonstra o resultado de uma chamada a esse mtodo,


comparando o seu retorno com o relgio do servidor no qual o projeto
foi publicado.

Figura 1. Retorno da requisio

Perceba que a hora retornada pelo servio no igual hora atual do


computador, pois esse valor s ser atualizado dois minutos aps a
primeira chamada.
Seguindo essa ideia, podemos implementar solues mais complexas,
que de fato contribuiro para a melhoria de performance do nosso
projeto, diminuindo o nmero de requisies que poderiam gerar
lentido.