Skip to content

Laboratoria/SAP006-burger-queen-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Burger Queen - API com Node.js

Índice

1. Prefácio

Node.js logo

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. 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 API, 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 lidar com as requisições que chegam e devolver respostas, 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 partimos de um boilerplate que já contém uma série de endpoints (pontos de conexão ou URLs) e nos pedem para completar a aplicação. Isto implica que teremos que começar a ler a implementação existente, e familiarizar-nos com a stack escolhida (Node.js, Express), Sequelize, e PostgreSQL.

O cliente nos deu um link para a documentação que especifica o comportamento esperado da API que iremos expor por HTTP. Lá podemos encontrar todos os detalhes que os endpoints deve implementar na aplicação, que parâmetros esperam, o que devem responder, etc.

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 como framework, PostgreSQL como base de dados, containers de docker (Hacker Edition), etc).

Neste projeto, você desenvolverá um servidor web que deverá servir JSON através de uma conexão HTTP, e implantá-lo em um servidor na nuvem.

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), deployment...

3. Objetivos de aprendizagem

Node.js

JavaScript

  • Uso de linter (ESLINT)

  • Uso de identificadores descritivos (Nomenclatura | Semântica)

Git e GitHub

  • Git: Instalação e configuração

  • Git: Controle de versão com git (init, clone, add, commit, status, push, pull, remote)

  • Git: Integração de mudanças entre ramos (branch, checkout, fetch, merge, reset, rebase, tag)

  • GitHub: Criação de contas e repositórios, configuração de chave SSH

  • GitHub: Implantação com GitHub Pages

    Links

  • GitHub: Colaboração pelo Github (branches | forks | pull requests | code review | tags)

  • GitHub: Organização pelo Github (projects | issues | labels | milestones | releases)

Express.js

  • Rotas

  • Uso e criação de middleware (Hacker Edition)

HTTP

Autenticação (Hacker Edition)

  • JWT (JSON Web Token)

  • Armazenamento e acesso de senhas

Bases de dados (PostgreSQL)

  • Instalação

  • Conexão

  • Queries e comandos (criação, leitura, atualização, eliminação)

4. Considerações gerais

Este projeto poderá ser realizado individualmente ou em duplas. Posteriormente, poderá estar integrado com o projeto Burger Queen API client já realizado.

A lógica do projeto deve estar implementada totalmente em JavaScript (ES6). Neste projeto está permitido usar bibliotecas ou frameworks.

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

5.1 API

Conforme estabelecido pela documentação entregue pelo nosso cliente, 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

5.1.4 /auth (Hacker Edition)

  • POST /auth

5.2 Implantação (Deployment)

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 ;).

6. 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.

  • Criptografar senha do usuário
  • Endpoint de autenticação: POST /auth
  • Middleware de autenticação - verificação do token
  • Middleware de erros
  • Criar a documentação da API
  • Testes unitários para cada função
  • Testes "end to end" ou e2e (de uma ponta a outra)
  • Docker

Criptografar senha do usuário

É uma boa prática NÃO armazenar a senha do seu usuário no seu banco de dados, pois colocaria a segurança de seu usuário em risco. Assim, ao invés de armazená-la como um simples string, a ideia é armazenar uma hash criptografada. Por exemplo, pode-se usar o bcryptjs.

Assim, na autenticação (POST /auth), se a senha do usuário está certa ou não, poderá ser feita comparando essa hash.

Criar a documentação da API

Sugerimos o uso do Swagger ou JSDoc para escrever a sua própria documentação

Docker

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 :)

Para este projeto te recomendamos a usar docker-compose localmente (em seu computador) para executar a aplicação junto com a base de dados.

7. Pistas, tips e leituras complementares

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

Tutoriais

Seguem alguns tutoriais que você pode fazer para praticar, para ganhar uma maior familiaridade com algumas das ferramentas utilizadas... mas não se prenda a eles. Existem diversas formas de fazer, entenda o uso das ferramentas e os tutoriais podem de dar uma base de prática.

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, 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!

Ferramentas e documentações

Materiais para Hacker Edition


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

8.4 Hacker Edition

  • Criptografar senha do usuário
  • POST /auth
  • Middleware de autenticação
  • Middleware de erros
  • Documentação da API
  • Testes unitários
  • Testes e2e
  • Docker

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages