Skip to content

Juliane-C/SAP005-burger-queen-api

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

84 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Burger Queen - Back-end

Índice

1. Prefácio

Um pequeno restaurante de hamburgueres, que está crescendo, necessita de um sistema para realizar pedidos usando um tablet, e que os enviem à cozinha para que sejam preparados de forma ordenada e eficiente.

A interface front-end da aplicação Burger Queen já foi criado, e agora precisamos criar o back-end para manejar os dados. Neste caso, isso será feito através de uma API rest que será compatível com as requisições vindas do front.

2. Resumo do projeto

Como back-end, nesse caso nos referimos a um servidor web, que é basicamente um programa que ouve o que acontece na aplicação através de uma porta de rede, pela qual podemos enviar requisições (requests) e obter respostas (responses).

Um servidor web deve manejar as requisições que chegam e devolver respostas a elas, que serão enviadas de volta ao cliente. Quando falamos de aplicações de servidor, isso implica uma arquitetura de cliente/servidor, onde o cliente é um programa que faz requisições através de uma rede (por exemplo o navegador, o cURL, etc) e o servidor é o programa que recebe essas requisições e as responde.

O Node.js nos permite criar servidores web super eficientes de maneira relativamente simples, tudo isso usando JavaScript!

Neste projeto vamos partir de um boilerplate que já contém a estrutura básica do projeto (para criar essa estrutura, utilizamos o comando para criação de boilerplates básicos do Sequelize). Isso significa que teremos que começar lendo a implementação existente e nos familiarizando com o stack escolhido: Node.js, Express, Sequelize, PostgreSQL e outras bibliotecas auxiliares.

Recomendamos também o uso do Postman para você testar suas rotas, ele vai te ajudar a ter um "visual" das requisições e você também pode utilizá-lo para enviar dados através do header e body.

3. Objetivos de aprendizagem

Neste projeto, você desenvolverá um servidor web que deverá servir JSON através de uma conexão HTTP.

O objetivo de aprendizagem principal é adquirir experiência com o Node.js como ferramenta para desenvolvimento de aplicações de servidor, junto com uma série de outras ferramentas comumente utilizadas nesse contexto (Express para rotas, Sequelize para interface com o banco, PostgreSQL como banco de dados, etc).

Além disso, você vai entender como funciona o processo de desenvolvimento de uma API aplicando o modelo rest e como integrar sua API a um banco de dados relacional. Para isso, sua aplicação deverá seguir o modelo de arquitetura MVC (Model View Controller), utilizando boas práticas de desenvolvimento web.

Ao final do projeto, você deverá estar familiarizada com conceitos como rotas (routes), URLs, HTTP (verbos, request, response, headers, body, status codes, etc), JSON, conexão com uma base de dados (PostgreSQL), variáveis de ambiente, modelos de arquitetura, entre outros.

Node

Testes

Estrutura do código e guia de estilo

  • Organizar e dividir o código em módulos (Modularização)
  • Uso de identificadores descritivos (Nomenclatura | Semântica)
  • Uso de linter (ESLINT)

Git e GitHub

  • Uso de comandos de git (add | commit | pull | status | push)
  • Gerenciamento de repositorios de GitHub (clone | fork | gh-pages)
  • Colaboração no Github (branches | pull requests | | tags)
  • Organização no Github (projects | issues | labels | milestones)

Express

  • Rotas.
  • middlewares

HTTP

Autenticação

  • JWT
  • Armazenamento e acesso de senhas.

Base de dados (PostgreSQL)

  • Instalação.
  • Conexão através de cliente.
  • String de conexão
  • Queries e comandos (criação, leitura, atualização, eliminação)

4. Considerações gerais

Neste projeto, está permitido o uso de bibliotecas e frameworks. O boilerplate já tem um arquivo de configuração package.json com todas as dependências necessárias, mas você pode adicionar alguma que encontre em suas pesquisas e que ache útil.

5. Critérios de aceitação do projeto

5.1 API

A API deve expor os seguintes endpoints:

5.1.1 /users

  • GET /users
  • GET /users/:uid
  • POST /users
  • PUT /users/:uid
  • DELETE /users/:uid

5.1.2 /products

  • GET /products
  • GET /products/:productid
  • POST /products
  • PUT /products/:productid
  • DELETE /products/:productid

5.1.3 /orders

  • GET /orders
  • GET /orders/:orderId
  • POST /orders
  • PUT /orders/:orderId
  • DELETE /orders/:orderId

6. Entrega

O código do projeto deverá estar em um repositório no GitHub. O deploy para produção deverá ser feito utilizando um serviço de hospedagem como o Heroku, que tem integração com o PostgreSQL (cuidado para não subir as chaves de autenticação para o GitHub do projeto ;)).

7. Primeiros Passos

Dependências

  1. Faça o fork e git clone do projeto;
  2. Instale o projeto localmente com npm install;
  3. Rode o comando npm start para subir o boilerplate do projeto na porta 3000.

Aqui o seu servidor já está funcionando! Teste e explore o código para entender o exemplo que já vem no boilerplate! E lembre-se, nesse projeto não há interface, e estaremos utilizando o console e ferramentas como o Postman para visualizar nosso projeto.

Até o momento, ainda não temos um banco de dados. Nosso banco de dados estará no Heroku, então precisaremos configurar e conectá-lo ao nosso projeto.

Conteúdos importantes

Conteúdo extra

Tutoriais

Após ver os conteúdos importantes (veja esses conteúdos antes de qualquer coisa para ter uma ideia melhor do que está acontecendo), seguem alguns tutoriais que você pode fazer para praticar antes do projeto, se quiser.

Muito importante: Os tutoriais são bons para praticar, mas nenhum deles vai ser exatamente igual ao seu projeto, nem na estrutura, nem no código, nem no banco utilizado. O objetivo é que você pratique algumas partes principais do que sua aplicação deve fazer (requisições do tipo get, post, etc, conexões com banco, rotas com Express e por aí vai) e procure aplicar o que aprendeu em seu projeto. Além disso eles podem ter bugs ou desatualizações. Caso aconteça, aproveite para praticar suas habilidades de debug!

  • Tutorial super iniciante de como funcionam as rotas e sintaxe do Express, sem banco, somente com um arquivo.

  • Tutorial simples do iMasters, somente com um arquivo e sem utilizar nenhum banco de dados (esse papel é feito por um arquivo JSON). O link para o arquivo de testes está quebrado no texto, mas ele pode ser encontrado aqui. Este arquivo tem as informações necessárias para testar as requisições no Postman - explore cada requisição e veja como as informações (especialmente as do body) são passadas!

  • Tutorial mais estruturado utilizando MongoDB. Não é o mesmo tipo de banco que iremos utilizar no projeto, mas esse tutorial já traz a estrutura da aplicação mais separada, no caminho do que queremos implementar no projeto. Você vai precisar instalar o MongoDB.

  • Tutorial com Express e Sequelize estruturado de forma mais parecida com o nosso projeto. Esse tutorial utiliza o MySQL como banco, você vai precisar instalar e criar um novo banco antes de começar. Esse tutorial não está 100% perfeito (você vai encontrar alguns erros pelo caminho) mas é bastante válido para entender melhor a estrutura do nosso projeto e como o Sequelize e o Express trabalham juntos.

  • Tutorial com Express e MongoDB também estruturado de forma similar. Esse tutorial utiliza o banco MongoDB, que é um banco nosql, então não utiliza o Sequelize. Ele tem 4 partes, fazendo só a primeira parte já dá uma boa ideia.

  • Tutorial extra para desenvolvimento de API com NodeJS, Postgres, Sequelize e outras libs - em inglês

Importante: Quando utilizamos tutoriais, fazemos muito copia-e-cola de código. Ás vezes, quando exibidos na tela, alguns caracteres (especialmente aspas duplas e simples) acabam sendo convertidos para caracteres bem parecidos, mas que o código não reconhece. Se acontecer de você copiar algum código e depois que colar no editor ele estar cheio de "squiggles" (aqueles ~~~~ vermelhos), verifique se o editor não está reclamando de alguma aspa que não está sendo reconhecida. A mesma coisa quando copiamos e colamos comandos: se algum comando no terminal não for reconhecido, verifique se o duplo hífen (--) não acabou sendo substituído por um travessão (-).


8. HTTP API Checklist

8.1 /users

  • GET /users
  • GET /users/:uid
  • POST /users
  • PUT /users/:uid
  • DELETE /users/:uid

8.2 /products

  • GET /products
  • GET /products/:productid
  • POST /products
  • PUT /products/:productid
  • DELETE /products/:productid

8.3 /orders

  • GET /orders
  • GET /orders/:orderid
  • POST /orders
  • PUT /orders/:orderid
  • DELETE /orders/:orderid

9. Hacker Edition

As seções chamadas Hacker Edition são opcionais. Se você terminou tudo e ainda sobrou tempo, faça essa parte. Assim você poderá aprofundar e exercitar mais sobre os objetivos de aprendizagem do projeto.

  • Endpoint de autenticação: POST /auth
  • Middleware de autenticação
  • Middleware de erros
  • Outros endpoints
  • Criar a documentação da API
  • Testes unitários para cada função
  • Testes "end to end" ou e2e (de uma ponta a outra)

Se quiser, também poderá se aventurar no Docker e dar os primeiros passos com containers.

Um container (que pode ser criado com Docker) serve para garantir que os ambientes de desenvolvimento e produção sejam exatamente os mesmos, não importa em que sistemas operacional/versão funciona o computador da desenvolvedora. Terminando com o famoso (e temido) "na minha máquina funciona".

O Docker cria uma container de um sistema operacional onde podemos definir configurações e versões de softwares, e é dentro de um desses containers que podemos testar e executar nossos projetos independente do sistema operacional que rodamos em nossa máquina física :)

9.1 Conteúdos importantes

9.2 Checklist Hacker Edition

  • POST /auth)
  • Middleware de autenticação
  • Middleware de erros
  • Documentação da API
  • Testes unitários
  • Testes e2e
  • Docker