Um dos maiores desafios de uma WebApi é como fazer com que os clientes usem a API o mínimo possível para não haver sobrecarga. Uma das formas mais simples de fazer com que o servidor fique menos carregado é comprimir a resposta dada pela WebApi. Vamos aprender como neste artigo.
A compactação GZIP, que vamos aplicar numa WebApi, permite compactar a resposta das chamadas em até 90%. Estamos diminuindo o tempo de comunicação de dados entre API e cliente em troca do processamento extra na API compactando os dados. Ou seja, se sua WebApi está hospedada num servidor com um processador muito fraco, o resultado pode não ser o esperado.
Isto posto, vamos imaginar o seguinte cenário. Eu criei uma WebApi bem simples, devolvendo uma lista de objetos do tipo Pessoa.
public class Pessoa
{
public string Nome { get; set; }
public string Salario { get; set; }
public string CorDosOlhos { get; set; }
public int Idade { get; set; }
public string Email { get; set; }
public string Contato { get; set; }
public string DataDeRegistro { get; set; }
}
Eu simplesmente estou trazendo um conjunto de 100 pessoas transformando List<Pessoa> e devolvendo o resultado.
public class HomeController : ApiController
{
public List<Pessoa> Get()
{
return JsonConvert.DeserializeObject<List<Pessoa>>(Resources.Informacao);
}
}


Precisamos instalar os pacotes Microsoft.AspNet.WebApi.Extensions.Compression.Server e System.Net.Http.Extensions.Compression.Client. Você precisa usar o comando Install-Package para fazer a instalação. Digite as duas linhas abaixo, uma por vez:
Install-Package Microsoft.AspNet.WebApi.Extensions.Compression.Server
Install-Package System.Net.Http.Extensions.Compression.Client

Agora com ambos os pacotes instalados, acesse o arquivo Global.asax e adicione a linha abaixo. Basicamente, estamos criando um novo MessageHandler para aplicar a compressão GZip em todas as chamadas da WebApi.
GlobalConfiguration.Configuration .MessageHandlers .Insert(0, new ServerCompressionHandler(new GZipCompressor(), new DeflateCompressor()));
WebApiApplication do arquivo Global.asax:
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
GlobalConfiguration.Configuration
.MessageHandlers
.Insert(0, new ServerCompressionHandler(new GZipCompressor(), new DeflateCompressor()));
GlobalConfiguration.Configure(WebApiConfig.Register);
}
}
E se testarmos novamente nossa WebApi, o tamanho da resposta caiu cerca de 75%, para cerca de 5 KBs!
