Logo

Back end

Back end

Sumário

Introdução

Este projeto objetiva criar um backend (uma API web) que interaja com o frontend (projeto 3) criado no módulo #3.

Você pode, contudo, realizar este projeto antes do projeto #3. Para tal você utilizará o frontend de exemplo que forneci.

Pode-se dizer que todos produtos de software possuem um banco de dados. Contudo nem todos os dados podem ser expostos. O backend atua como interface entre o frontend e o banco de dados, garantindo que apenas os dados relevantes cheguem aos usuários.

Relevância profissional

Aplicações backend são extremamente comuns, pois permitem que as empresas donas do software recebam e processem os dados de seus usuários sem que exponha suas regras de negócios e seus dados.

Pré-requisitos

O projeto #2 é pré-requisito deste projeto.

*Este projeto é pré-requisito do projeto #5.

Meta de tempo de estudos

  • Invista cerca de 20 horas estudando os conteúdos
  • Realize o projeto 1 (Manipulador de arquivos) em cerca de 20 horas.
  • Realize o projeto 2 (Backend para um frontend) em cerca de 10 horas.
  • Realize o projeto 3 (Testar com o Supertest) em cerca de 10 horas.

Projetos

  1. Manipulador de arquivos
  2. Neste projeto, você deverá exibir, criar, alterar, remover e mover arquivos do seu sistema.
    Além disso, seu código deverá ser capaz de receber argumentos pela linha de comando.

    Crie um código a ser executado pelo terminal que aceite os seguintes argumentos:

    • node meu_cli.js exibir meu_arquivo_teste.txt
      O conteúdo do arquivo deve aparecer integralmente na tela.
    • node meu_cli.js criar meu_arquivo_teste.txt "Meu texto a ser gravado no arquivo"
      Deve criar um arquivo com o nome passado no segundo argumento (meu_arquivo_teste.txt) e contendo o texto que foi passado como terceiro argumento ("Meu texto a ser gravado no arquivo").
    • node meu_cli.js alterar meu_arquivo_teste.txt "Mudei o texto aqui"
      Deve alterar o arquivo de nome passado no segundo argumento (meu_arquivo_teste.txt) para que seu conteúdo seja o texto que foi passado como terceiro argumento ("Mudei o texto aqui").
    • node meu_cli.js remover meu_arquivo_teste.txt
      Deve deletar o arquivo de nome passado no segundo argumento (meu_arquivo_teste.txt).
    • node meu_cli.js mover meu_arquivo_teste.txt C:/pasta_destino/meu_arquivo_teste.txt
      Deve mover o arquivo de nome passado no segundo argumento (meu_arquivo_teste.txt) para o caminho passado no terceiro argumento (C:/pasta_destino/meu_arquivo_teste.txt).
    • node meu_cli.js OU node meu_cli.js help
      Deve exibir a lista de comandos possíveis e uma descrição de como usá-los.

    Você deve validar todos os parâmetros, de forma que ao passar parâmetros inválidos, seu programa deverá exibir uma mensagem de erro e exibir a lista de comandos e suas instruções de uso.

    Uma outra ideia é fazer o programa renomear todos os arquivos de uma pasta conforme um dado critério.
    Ou ainda, agrupar os arquivos em diferentes pastas conforme sua extensão.

  3. Backend para um frontend
  4. Este projeto objetiva criar um backend que interaja com o frontend (projeto 3) criado no módulo #3, substituindo o CrudCrud.

    Crie um servidor web utilizando Express.JS, com um banco de dados MySQL ou MongoDB (sugiro que faça os dois, um de cada vez) contendo as seguintes rotas:

    • GET /pessoas
      Deve retornar um JSON contendo todas as pessoas cadastradas.
    • POST /pessoas
      Deve receber um JSON contendo os dados de uma pessoa a ser cadastrada.
    • PUT /pessoas/{ID}
      Deve receber um JSON contendo os dados de uma pessoa e alterar os dados da pessoa com o ID passado na rota (exemplo: /pessoas/123 altera a pessoa ID 123)
    • DELETE /pessoas/{ID}
      A pessoa do ID passado deve ser removida do banco de dados.

    Para utilizar a sua API, coloque o endereço IP do seu backend no frontend, em vez do endereço do CrudCrud.
    Você pode utilizar tanto o próprio frontend quanto um API Client (como o Thunder Client) para desenvolver e testar sua aplicação backend.
    Após finalizá-la, garanta que o frontend esteja funcionando sem problemas com o backend criado.

  5. Testar com o Supertest
  6. Agora que finalizamos a API, você deve criar testes automatizados para ela usando o Supertest.

    O Supertest é uma ferramenta que simula as interações que o frontend faria com o backend.

    Faça um código que envie requisições HTTP para a aplicação backend que você construiu no projeto anterior. Ela deve testar todas as rotas, simulando um uso real da aplicação.

    Exemplos de casos de testes:

    • verificar que a listagem de pessoas está vazia;
    • inserir uma nova pessoa e conferir se foi adicionado na rota de listagem;
    • editar/deletar e conferir;
    • editar/deletar um usuário que não existe;
    • fazer requisições inválidas que retornem erros (caso sua API tenha alguma validação).

Sugestões de recursos para estudo

Aprofundamento

  • Adicionar novas funcionalidades ao primeiro projeto, como:
    • Agrupar os arquivos de um diretório em pastas distintas, conforme a extensão dos arquivos.
    • Agrupar os arquivos em pastas distintas, conforme o tamanho dos arquivos. (exemplo, arquivos com menos de 1gb são movidos para a pasta 1gb-, enquanto arquivos maiores são movidos para a pasta 1gb+)
  • Melhorar o segundo projeto, adicionando novas funcionalidades como essas descritas no segundo item de aprofundamento do frontend.
  • Refaça o projeto 2 utilizando outra linguagem como C#, Java, PHP, Python, Ruby ou Go.
    Uma boa opção é utilizar um framework web, como: ASP.NET Core, Spring Boot, Laravel, Django, Ruby on Rails ou Gin.
  • Faça um sistema de web scrapping.
    Web scrapping é uma forma de extrair dados de websites de forma automatizada.
    Para isso, você utiliza o Node.JS com uma biblioteca como o Puppeteer. Com ele, você é capaz de controlar um navegador de forma programática.
    Crie um código que navegue por um site, extraia dados das páginas e armazene-os em um banco de dados ou em um arquivo.
    Uma ideia é pegar os dados de produtos em promoção em um e-commerce.