Este projeto foi desenvolvido como forma de avaliação para a disciplina de Programação Web II do curso Tecnologia em Análise e Desenvolvimento de Sistemas - IFSul, Campus Bagé.
A proposta solicitava o desenvolvimento de um projeto abordando técnicas básicas e aplicação de framework Web com ORM.
Conteúdos esssenciais para o projeto:
- Servidor http e seus verbos (GET, POST, PUT, DELETE);
- Grupos de rotas;
- Banco de dados (relacional ou não relacional);
- Autenticação (Token);
- Middleware;
- Padrão MVC;
- Criptografia (Hash).
-
Abra o projeto no VSCode;
-
Digite Ctrl + Shift + ` para abrir um novo terminal;
-
Com o terminal aberto rode um dos comandos abaixo para instalar automaticamente as dependências do projeto:
$ yarn install //para gerenciador de pacotes yarn
$ npm install //para gerenciador de pacotes npm
- Após instaladas as dependências rode um dos comandos abaixo para iniciar a aplicação:
$ yarn start //para gerenciador de pacotes yarn
$ npm start //para gerenciador de pacotes npm
- Após estar com o servidor rodando, basta testar as rotas da API utilizando Insomnia ou Postman
Nodemon (biblioteca pra restartar a aplicação a cada alteração)
$ yarn add nodemon
$ npm i nodemon
Express (framework pra trabalhar com servidor http)
$ yarn add express
$ npm i express --save
Mongoose (biblioteca pra fazer conexão com banco mongodb)
$ yarn add mongoose
$ npm i mongoose
Bcrypt (biblioteca pra fazer hash de senha)
$ yarn add bcrypt
$ npm i bcrypt
Jsonwebtoken (padrão de autenticação/geração de token)
$ yarn add jsonwebtoken
$ npm i jsonwebtoken
- 100-199: respostas de informação
- 200-299: respostas de sucesso
- 300-399: redirecionamentos
- 400-499: erros do cliente
- 500-599: erros do servidor
- GET
- Sem passagem de parâmetro: retorna uma lista completa com todos os dados;
- Com passagem de parâmetro: retorna apenas os dados referentes ao parâmetro especificado;
- POST
- Normalmente é utilizado sem passagem de parâmetro para inserir algum dado;
- PUT:
- Normalmente é utilizado com passagem de parâmetro para editar algum dado no recurso referida;
- DELETE:
- Utilizado para remover um recurso (utilizar com passagem de parâmetro)
- Cliente (client) - faz um pedido;
- Garçom (API) - anota o pedido em um bloquinho de notas;
- Cozinha (server) - recebe o pedido através do bloquinho do garçon.
API (application programming interface) é basicamente um conjunto de rotinas e padrões estabelecidos por uma aplicação, para que outras aplicações possam utilizar essas funconalidades.
- Responsável por establecer comunicação entre diferentes serviços;
- Intermediador para troca de informações.
REST (representational state transfer - transferência de estado representativo) é a transferência de dados de uma maneira representativa/didática (json ou xml).
- A transferência de dados geralmente é feita usando protocolo http (bloquinho de notas do garçom).
- Determina algumas obrigaçoes na transferência de dados;
Existem 6 necessidades (constraints) para ser RESTful:
- Client-server: cleinte e servidor precisam estar separados, dessa forma poderemos ter uma portabilidade do nosso sistema (usando React pra web e RN pra mobile, por exemplo);
- Stateless: Cada requisição que o cliente faz para o servidor, deverá conter todas as informações necessárias pro servidor entender e responder (response) a requisição (request), ele NÃO pode armazenar essas informações - nesse caso ele teria um ESTADO. Exemplo: A sessão do usuário deverá ser enviada em todas as req, para saber se aquele usuário está autenticado e apto a usar os serviços, e o servidor não pode lembrar que o cliente foi atutenticado na req anterior;
- Cacheable: As respostas para uma requisição deverão ser explicitas ao dizer se aquela req pode ou não ser cacheada pelo cliente;
- Layered System: Nesse exemplo o graph.facebook é uma API e o youtube é um endpoint (caminho onde quer chegar) https://graph.facebook.com/youtube. O cliente acessa um endpoint, sem precisar saber da compexidade, de quais passos estão sendo necessários para o servidor responder a req, ou quais outras camadas o servidor estará lidando para que a req seja atendida;
- Code on demand (optional): O servidor manda pro cliente um script que pode ser executado no front. Dá a possibilidade da nossa aplicação pegar códigos (JS por ex.) e executar no cliente;
- Uniform Interface: Manter o mesmo padrão no desenvolvimento de toda a aplicação.
Referências de estudo Rocketseat