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);
    }
}
Testando localmente esta WebApi usando o Postman, vemos que o retorno tem aproximadamente 20 KBs de tamanho. Olhando de forma individual, 20 KBs não são nada. Mas imagine uma API acessada por vários clientes, e de forma simultânea. Qualquer forma de agilizar a resposta é válida.
Precisamos instalar alguns pacotes NuGet para ativar a compressão de WebApis. Selecione o projeto da WebApi e acesse o menu Tools > NuGet Package Manager > Package Manager Console.

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()));
Veja como fica a classe 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!

Como visto, estamos adicionando um processamento extra em nossa WebApi em troca de uma visível economia no tráfego de rede, fazendo com que a resposta fique menor e mais rápida. Uma forma fácil de desafogar o tráfego de uma API sem perda de recursos. Até a próxima!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Post Navigation