ASP.NET Core: utilizando compressão em APIs REST

O objetivo deste artigo é demonstrar o uso do middleware de compressão de respostas em APIs REST criadas com o ASP.NET Core.

E por falar em tecnologias Microsoft, no dia 13/06/2017 (terça) às 22h00 - horário de Brasília - teremos mais um Azure Talks no Canal .NET. O tema desta será o uso bancos de dados relacionais no Azure, com foco no SQL Azure, MySQL e PostgreSQL.
Para se inscrever e participar acesse esta página. A transmissão será via YouTube, em um link a ser divulgado em breve.

Introdução

A performance é uma preocupação central em muitas soluções Web, com diversas práticas fornecendo meios para a obtenção de melhores resultados em quesitos como responsividade e quantidade de dados trafegados. APIs REST não fogem a esta regra, sendo comum em estruturas deste tipo o uso de técnicas de compressão a fim de reduzir o volume das informações produzidas.

No caso específico do ASP.NET Core, esta plataforma conta com um middleware que simplifica o processo de compressão dos dados a serem retornados por uma aplicação Web. As próximas seções trazem um exemplo de uso deste recurso, a partir da implementação e monitoramento dos dados gerados por uma API REST.


Implementando a aplicação de exemplo

Inicialmente será criado um projeto do tipo ASP.NET Core Web Application (.NET Core) chamado ExemploCompressao:

Selecionar na sequência a versão 1.1 e a opção Web API em ASP.NET Core 1.1 Templates:

Como próximo passo implementar uma classe chamada Produto, a qual representará os itens comercializados por uma empresa fictícia:

A classe ProdutosController receberá solicitações de consulta a produtos, devolvendo como resultado uma lista “fake” formada por 100 itens:

Para os testes desta aplicação de exemplo será empregado o Fiddler, utilitário gratuito que possibilita o monitoramento de solicitações HTTP enviadas a APIs REST.

Uma requisição será então enviada a ProdutosControllers via browser, produzindo um resultado similar ao da imagem a seguir:

Na próxima figura é possível observar detalhes da resposta gerada, incluindo o tamanho da mesma (6.362 bytes):


Ativando o middleware de compressão

O middleware de compressão de respostas integra o package Microsoft.AspNetCore.ResponseCompression, o qual encontra-se disponível no NuGet:

Para ativar o uso da compactação será necessário realizar as seguintes modificações na classe Startup:

  • Acionar o método genérico Configure em ConfigureServices, informando o tipo GzipCompressionProviderOptions (namespace Microsoft.AspNetCore.ResponseCompression) e a opção Optimal para CompressionLevel (namespace System.IO.Compression). Este ajuste fará com que a compressão seja otimizada, por mais que este processo leve um pouco mais de tempo para sua conclusão (outros valores possíveis para o enum CompressionLevel são Fastest e NoCompression);
  • Ainda em ConfigureServices invocar o método AddResponseCompression, definindo o tipo GzipCompressionProvider como o provider para a compactação no formato GZIP;
  • Já na operação Configure acionar o método UseResponseCompression, a fim de ativar o middleware para compressão de respostas.

Após um novo teste via browser será possível observar no Fiddler que as alterações surtiram efeito:

  • O tamanho da resposta foi reduzido para 772 bytes;
  • Já no atributo Content-Encoding do Header foi especificado o valor gzip, indicando o padrão de compactação utilizado pela API REST.

Conclusão

Este artigo procurou enfatizar como é simples o uso de técnicas de compressão em aplicações baseadas no ASP.NET Core. Ativar o middleware disponibilizado através do package Microsoft.AspNetCore.ResponseCompression requer esforços mínimos em termos de configuração, tendo como resultado direto um menor volume de dados trafegados.