Neste artigo vou apresentar uma forma simples, fácil e dinâmica de configurar filtros nos endpoints de APIs utilizando o .NET.
O Gridify é uma biblioteca pouco conhecida, mas de grande utilidade. Criado pelo Alireza Sabouri, ela tem o objetivo de facilitar a vida do desenvolvedor que precisa criar vários endpoints de filtragens, como por exemplo: GetById, GetByName, GetByDate. Com o Gridify é possível ter apenas um endpoint de filtragem para cada tipo de entidade.
Pré-requisitos
- .NET 7.0
- Visual Studio 2022
- Nuget package Entity Framework Core, Gridify
Web API
Na classe program.cs da API, configure conforme o código abaixo:
O próximo passo é criar o contexto (BookContext). Neste exemplo, utilizaremos o Entity Framework InMemory para persistir e consultar as informações com o Gridify:
Em seguida, crie uma controller com o nome de GridifyController e insira o código abaixo para testes:
O GridifyQuery é uma classe simples para configurar filtros, ordenação e paginação, já o método GridifyQueryable aplica esses filtros na entidade Books.
Testando
Para realizar os testes, execute o endpoint GET /gridify/books no Swagger passando os parâmetros do filtro a serem realizados no banco pelo Gridify.
Como teste, pesquisei pelo título “Programming Pearls” e trouxe um registro, caso não existisse este título, seria retornado uma lista vazia, e caso não existisse a propriedade “title” no contexto, seria retornado um erro informando que esta coluna não existe no banco.
Por questões de segurança, também é possível utilizar o Automapper para realização de mapeamentos entre a ViewModel e Entidade, assim o usuário final não precisa ter o conhecimento dos nomes das colunas no banco de dados.
Para mais detalhes e melhores práticas de utilização, sugiro seguir a documentação: https://alirezanet.github.io/Gridify/guide
Finalizando
O Gridify é uma ferramenta extremamente útil para o desenvolvedor, evitando que sejam criados vários métodos de filtragens, praticando a reutilização de códigos.
A utilização deste package é muito simples, e ainda há a possibilidade de utilizar de forma detalhada com o QueryBuilder, deixando você ainda mais no controle.
Os detalhes completo deste exemplo você encontra no meu GitHub: https://github.com/hgmauri/sample-gridify