Pular para o conteúdo
Código e Café com PauloDev: Explorando o Universo da Programação

Código e Café com PauloDev: Explorando o Universo da Programação

Explore o universo da programação e tecnologia com PauloDev. Descubra insights, tutoriais e inovações que moldam o futuro digital. De linhas de código a ideias revolucionárias, embarque nesta jornada tech onde a paixão pela inovação se encontra com a expertise do desenvolvimento. Seja bem-vindo ao blog que transforma códigos em narrativas de vanguarda, guiado pela visão única de PauloDev no vasto panorama tecnológico.

  • Meu portifolio

Paginação – Um conceito importante para construção de APIs Restful

17 de junho de 2024
Por Paulo In Boas Práticas, CSharp

Paginação – Um conceito importante para construção de APIs Restful

Não só de código vive uma aplicação; junto a ele, temos também boas práticas para escrever código. Hoje, trago para vocês um pouco sobre o conceito de paginação.

Imagine que você tem uma base de dados pequena, com seus 10 clientes, e que sua API retorne todos em uma única requisição, por exemplo, chamando http://localhost:8000/api/v1/clients. Funciona, certo? Claro que sim. Mas agora imagine o seguinte cenário: dentro de alguns meses, seu projeto vai de 10 clientes para 1.000.000, e você novamente precisa chamar no seu sistema sua lista de clientes. Pegou a ideia? Imagine listar todos esses 1.000.000 de uma só vez, imagine o impacto disso no seu sistema, a lentidão que irá causar para os seus usuários ou até mesmo o consumo do seu hardware. E claro, leve em consideração o número de requisições por segundo que serão realizadas.

Para isso, temos a paginação, um conceito que, apesar de simples, auxilia de forma considerável não só no ganho de performance, mas também ajuda a evitar lentidão massiva e até travamentos de aplicativos em casos graves.

O que é paginação ?

Paginação trata-se da obtenção de resultados parciais de uma API, ou, de forma simples, quebrar um montante de dados em pequenas quantidades e retornar para o seu usuário. Como citado no exemplo anterior, imagine ter milhões de resultados no banco de dados e sua aplicação ser obrigada a retornar todos eles de uma vez.

Portanto, voltando ao exemplo, uma solução simples seria implementar uma paginação para retornar uma quantidade x de registros de clientes. Isso já evitaria a lentidão do sistema e ajudaria a evitar o consumo excessivo do seu hardware.

Implementação:

Para o exemplo abaixo, utilizei a linguagem de programação C# com o ASP.NET framework, utilizando o Entity Framework para a construção das queries SQL. Contudo, não se limite a isso, sinta-se livre para usar qualquer outra linguagem; foque em entender o conceito. Depois disso, a implementação se torna apenas uma questão de sintaxe.

A paginação possui como base alguns elementos primordiais para sua funcionalidade, são eles:

  • O número da página atual
  • O total de registros que devem ser retornados para o usuário final

Vamos iniciar criando um objeto para receber os parâmetros da query através do nosso controller:

public class ClienteParams
{
    const int maxPageSize = 50;
    public int PageNumber { get; set; } = 1;
    private int _pageSize = 10;
    public int PageSize
    {
        get { return _pageSize; }
        set { _pageSize = (value > maxPageSize) ? maxPageSize : value; }
    }
}

Primeiro, temos o maxPageSize, uma constante que representa o número máximo de registros que queremos retornar, ou seja, o usuário pode escolher buscar de 1 a 50 clientes por página na requisição. O PageNumber representa o número da página em que estamos, que por padrão recebe o valor 1, e a quantidade máxima pode variar com base na quantidade de registros que você tem na sua base de dados.

Agora vamos colocá-lo no nosso controller:

[HttpGet]
public IActionResult GetAll([FromQuery] ClienteParams clienteParams)
{
    var clientes = _clienteRepository.GetAll(clienteParams);
    return Ok(clientes);
}

Aqui, estamos usando o [FromQuery] para dizer ao framework que os dados de clienteParams estão vindo da query da requisição. Em seguida, chamamos o nosso repository para fazer a busca dos dados (caso você não saiba para que serve esse repository, tenho um post exclusivo para você, basta clicar aqui). Em seguida, apenas retorno o resultado.

Agora, vamos implementar a lógica de busca dos dados.

 public IEnumerable<Cliente> GetAll(ClienteParams clienteParams)
 {
     return _appDbContext.Clientes
         .OrderBy(c=>c.Id)
         .Skip((clienteParams.PageNumber - 1) * clienteParams.PageSize)
         .Take(clienteParams.PageSize)
         .ToList();
 }

Nesse cenário, estamos utilizando o método “Skip” para informar o número de registros que iremos pular, por exemplo, se estou querendo pegar os valores da página 23, será Skip((23-1) * tamanho da página). Em seguida, utilizo o método “Take” para informar a quantidade de valores que desejo coletar para retornar. Por fim, utilizo o “ToList()” para retornar uma lista desses valores.

Bem simples, não? De início pode parecer algo complicado de se implementar, mas vá em frente, tente por sua conta e verá como isso auxilia na melhora do seu código.

Conclusão

Apesar de simples, o conceito de paginação é algo de extrema importância quando estamos olhando em cenários em que a performance é o mais relevante. Saber quando e porque utilizá-la mostra que de fato você se importa com o crescimento e escalabilidade da aplicação, tornando-a capaz de suportar simples 10 clientes, ou até mesmo 1.000.000.

Nesse artigo você viu:

  • Porque usar paginação
  • O que é paginação
  • Teoria da implementação
  • Como implantar em C#
Promoção
Written by:

Paulo

Ver todos os posts

Categorias

  • Android
  • Android Studio
  • Angular
  • API
  • AWS
  • Back-end
  • Bash
  • Boas Práticas
  • CSharp
  • CSS
  • Django
  • Docker
  • Electron
  • Front-end
  • Git
  • Github
  • Html
  • Http
  • Java
  • JavaScript
  • Laravel
  • Linha de comando
  • Linux
  • Machine Learning
  • Metodologias
  • Mysql
  • Node
  • NoSql
  • PHP
  • Power Shell
  • Python
  • Segurança
  • Sem categoria
  • SQL
  • Tecnologia
  • Testes
  • VueJs
  • Windows

Últimos posts

  • Python para o desenvolvimento Web: Como o Django pode alavancar na escrita do seu código
  • Conheça as Transactions e como elas podem te ajudar a testar o seu sistema
  • Melhorando a performance dos seus projetos PHP, conheça o OPCache e o JIT
  • Redis com Laravel: Uma ferramenta poderosa para o escalonamento horizontal da sua aplicação
  • Conhecendo e configurando um servidor de Load Balance com YARP e NGINX

© Todos os direitos reservados PauloDev 2023