Neste novo artigo, trago algumas dicas para a obtenção de uma maior performance em APIs criadas com o ASP.NET Core. Não se trata de uma versão definitiva deste material, sendo que pretendo incluir sempre que for oportuno novos conteúdos relacionados a esse importante tópico.
Muito do que está aqui listado já foi agrupado em outro artigo, no qual venho mantendo um guia de referência atualizado sobre o desenvolvimento de APIs REST com o ASP.NET Core. Para ter acesso a este material, acesse o link a seguir:
Removendo valores nulos no retorno de uma API
Um descuido muito comum entre desenvolvedores .NET, consiste em não configurar a remoção de valores nulos no retorno de APIs REST. Tal comportamento encontra-se desabilitado por default, com a ativação do mesmo constituindo um processo extremamente simples e que foi detalhado no seguinte artigo:
Compressão de respostas em APIs REST
O ASP.NET Core conta com um middleware para a compressão de respostas em APIs REST, fazendo uso, para isto, do padrão GZIP. A vantagem deste tipo de prática está na diminuição do volume de dados trafegados entre o servidor que processará uma requisição e aplicações-cliente.
No artigo a seguir, demonstrei o uso deste recurso em uma API criada com o ASP.NET Core 1.1:
Este mesmo exemplo também foi convertido para o ASP.NET Core 2.0 e está no seguinte repositório (projeto ExemploCompressao):
Utilizando o suporte a JSON de bancos relacionais
Alguns SGBDs, como o SQL Server (desde a versão 2016), contam com a possibilidade de conversão do resultado de uma consulta para uma string JSON. E qual a relação disso com a performance em APIs REST?
O formato JSON é atualmente a alternativa mais utilizada para a representação de dados em APIs REST (embora XML seja a outra possibilidade, porém menos comum e geralmente associada a projetos legados).
A possibilidade de converter diretamente um conjunto de informações para o padrão JSON evita a codificação de inúmeras classes em um projeto ASP.NET Core, além de dispensar a execução de custosas operações de serialização/deserialização de objetos que seriam devolvidos como retorno da API considerada. No artigo a seguir temos um exemplo disto utilizando o ASP.NET Core e o SQL Server 2017:
Cache
Técnicas de armazenamento temporário de dados via cache são extremamente comuns em aplicações Web, com APIs REST não fugindo a esta regra.
O repositório a seguir, traz exemplos de utilização de cache empregando Redis e em memória para APIs desenvolvidas a partir do ASP.NET Core 2.0:
Performance no acesso a dados com Dapper
Micro-ORM empregado em projetos .NET nos quais a performance no acesso a dados em bases relacionais constituem um fator crítico, o Dapper também pode ser utilizado por APIs construídas com o ASP.NET Core. O artigo a seguir traz vários exemplos de implementação que fazem uso deste framework:
Utilizando soluções NoSQL
Soluções NoSQL como o MongoDB e o DocumentDB se destacam por uma excelente performance na manipulação de grandes conjuntos de informações. No próximo artigo vocês encontrarão exemplos de utilização destas tecnologias em APIs criadas com o ASP.NET Core 2.0:
Monitorando a performance com o Application Insights
Uma solução bastante flexível para o monitoramento de APIs REST (incluindo questões relacionadas a performance), é o Application Insights, alternativa que integra o Microsoft Azure e que pode ser empregada em diferentes plataformas, como: .NET, Java, Node e Ruby.
O artigo a seguir demonstra como o Application Insights pode ser utilizado em conjunto com o ASP.NET Core 2.0: