Reprograme-se • Tecnologias • Pré-requisitos • Instalação • Utilização • Rotas Protegidas • Implantação • Licença • Agradecimentos
Este projeto faz parte das atividades práticas do módulo 2024-F2M4: Node.js, do programa Reprograme-se. A proposta consiste em desenvolver um sistema de cadastro de livros e funcionários, dividido em duas partes:
-
Aplicação Front-end: Responsável pela interface do usuário, esta parte permite que os usuários visualizem, adicionem, editem e excluam informações sobre livros e funcionários de forma intuitiva e amigável. Repositório no Github
-
Aplicação Back-end: Esta parte gerencia os dados dos livros e funcionários, possibilitando a realização de operações de CRUD (Create, Read, Update, Delete) por meio de uma API, garantindo assim a integridade e segurança dos dados. Repositório no Github
Note
Esta aplicação se refere ao item 2 (Aplicação Back-end) e é responsável pelo gerenciamento dos dados dos livros e funcionários em um sistema de livraria, fornecendo uma API para interação com o banco de dados.
O Reprograme-se é um programa oferecido pelo IFES - Instituto Federal do Espírito Santo, com o objetivo de qualificar jovens e adultos para o mercado de trabalho na área de Tecnologia da Informação (TI). Para mais informações, visite o site oficial do Reprograme-se.
Este projeto foi desenvolvido utilizando um conjunto de tecnologias modernas e poderosas que contribuem para a construção de uma aplicação web robusta e eficiente:
- JavaScript: Uma linguagem de programação amplamente utilizada, tanto no front-end quanto no back-end, que oferece flexibilidade e desempenho.
- Node.js: Um ambiente de execução JavaScript que permite a criação de aplicativos escaláveis do lado do servidor.
- Express.js: Um framework web minimalista para Node.js que simplifica o desenvolvimento de APIs e aplicativos web, fornecendo uma série de recursos úteis e uma estrutura organizada.
- PostgreSQL: Um sistema de gerenciamento de banco de dados relacional de código aberto e poderoso, amplamente utilizado em projetos web para armazenamento seguro e eficiente de dados.
- SQLite: Um motor de banco de dados SQL embutido que oferece uma solução leve e autônoma para aplicações que precisam de armazenamento local de dados.
- JWT (JSON Web Tokens): Um padrão aberto (RFC 7519) que define uma forma compacta e autossuficiente para transmitir informações de forma segura entre as partes como um objeto JSON.
Antes de iniciar, você precisará ter as seguintes ferramentas instaladas em sua máquina:
- Node.js: Faça o download e siga as instruções de instalação para o seu sistema operacional.
- Git: Utilizado para clonar o repositório e trabalhar com controle de versão.
Além disso, você precisará de um editor de código de sua preferência, como Visual Studio Code.
-
Clonagem do repositório: Clone este repositório para o seu ambiente local usando o comando:
git clone https://github.com/prpires66/bookstore-api.git -
Instalação de dependências: Navegue até o diretório do projeto e instale as dependências usando o comando:
npm install -
Configuração do ambiente: Antes de executar a API, certifique-se de configurar as seguintes variáveis de ambiente:
SECRET: Chave secreta utilizada pelo JWT para assinar tokens de autenticação.POSTGRES_URL: URL de conexão com o banco de dados PostgreSQL.PORT: Porta em que o servidor da API será executado. Por padrão, é4000, mas você pode definir uma porta diferente se necessário.DB_TYPE: Tipo de banco de dados a ser utilizado. Os valores válidos sãosqliteoupostgres. Caso utilizepostgreso banco PostgreSQL deve ser provisionado separadamente.
Tip
Você pode definir essas variáveis de ambiente em um arquivo .env na raiz do projeto ou configurá-las diretamente no ambiente de execução, conforme suas preferências e os recursos disponíveis no ambiente utilizado. Abaixo um exemplo de arquivo .env:
SECRET="seu_segredo_aqui"
POSTGRES_URL="postgres://usuario:senha@localhost:5432/nome_do_banco"
PORT=4000
DB_TYPE="postgres"-
Execução da API: Inicie o servidor da API usando o comando:
npm start
Utilização da API: A API estará disponível em http://localhost:4000 por padrão, ou na porta especificada pela variável de ambiente PORT. Você pode enviar requisições HTTP para as rotas especificadas abaixo.
Esta API oferece diversos endpoints para interagir com os funcionários e livros de uma empresa.
| Método | Endpoint | Descrição |
|---|---|---|
POST |
/login |
Autentica um funcionário e retorna um token JWT. |
POST |
/funcionarios |
Cadastra um novo funcionário no sistema. |
GET |
/funcionarios |
Lista todos os funcionários cadastrados. |
GET |
/funcionarios/:id |
Retorna os detalhes de um funcionário específico, pelo seu id. |
PUT |
/funcionarios/:id |
Atualiza as informações de um funcionário específico, pelo seu id. |
DELETE |
/funcionarios/:id |
Exclui um funcionário específico, pelo seu id. |
Lembre-se de substituir
:idpelo ID correspondente ao funcionário desejado nas rotas que exigem esse parâmetro.
Note
Substitua <baseUrl> pelo endpoint onde a aplicação foi configurada para rodar.
curl -X POST '<baseUrl>/funcionarios' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <token>' \
--data-raw '{
"nome": "Paulo",
"email": "paulo@email.com",
"senha": "123456"
}'{
"message": "Usuário cadastrado com sucesso!"
}curl -X PUT '<baseUrl>/funcionarios/1' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <token>' \
--data-raw '{
"nome": "Joao",
"email": "joao@email.com",
"senha": "123456"
}'{
"message": "Funcionário atualizado com sucesso!"
}| Método | Endpoint | Descrição |
|---|---|---|
POST |
/livros/Cadastrar |
Cadastra um novo livro. |
GET |
/livros/:id? |
Lista todos os livros ou obtém detalhes de um específico. |
PUT |
/livros/:id |
Atualiza os dados de um livro. |
DELETE |
/livros/:id |
Exclui um livro. |
Lembre-se de substituir
:idpelo ID correspondente ao livro desejado nas rotas que exigem esse parâmetro.
Note
Substitua <baseUrl> pelo endpoint onde a aplicação foi configurada para rodar.
curl -X POST '<baseUrl>' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <token>' \
-d '{
"titulo": "A Revolução do Bixos",
"autor": "George Orwell",
"preco": "27,89",
"linkImagem": "https://m.media-amazon.com/images/I/91BsZhxCRjL._SL1500_.jpg"
}'{
"message": "Livro cadastrado com sucesso!"
}curl -X PUT '<baseUrl>' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <token>' \
-d '{
"titulo": "História Sem Fim",
"autor": "Ende",
"preco": "10.00",
"linkImagem": "https://m.media-amazon.com/images/I/91xWEABnMGL._SL1500_.jpg"
}'{
"message": "Cadastro atualizado com sucesso! ",
"dados": {
"titulo": "História Sem Fim",
"autor": "Ende",
"preco": "10.00",
"linkImagem": "https://m.media-amazon.com/images/I/91xWEABnMGL._SL1500_.jpg"
}
}Para acessar as rotas protegidas da API, você precisa incluir o token de autenticação no header da requisição. No caso do Postman ou programas similares, você deve adicionar o header Authorization: Bearer <token> com o valor do token na requisição. Todas as rotas são protegidas, exceto: / e /login.
curl -X POST -L 'http://<baseUrl>/login' \
-H 'Content-Type: application/json' \
-d '{
"email": "admin",
"senha": "1234"
}'{
"auth": true,
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOjAsIm5hbWUiOiJBZG1pbmlzdHJhZG9yIiwiZW1haWwiOiJhZG1pbkBlbWFpbC5jb20iLCJyb2xlcyI6WyJhZG1pbiIsInVzZXIiXSwiaWF0IjoxNzI0NjE5MzAyLCJleHAiOjE3MjQ2MjExMDJ9.CaS_bYV7Pl5LXvH8IK6h7HbwwaM4cAYIaF7N2Tl5k_Q",
"nome": "Administrador"
}Note
Para acessar as rotas protegidas utilize o token retonadado na autenticação no header das requisições Authorization: Bearer <token>.
Para implantar esta aplicação, você pode considerar duas abordagens populares:
-
Implantação em Servidor de Nuvem:
- Esta abordagem envolve hospedar a sua aplicação em um provedor de serviços de nuvem, como Vercel, Heroku ou Netlify.
- Você pode fazer o upload do código fonte da sua aplicação para a plataforma de hospedagem e seguir as instruções fornecidas pela plataforma para implantar a aplicação.
- Essas plataformas geralmente oferecem integração contínua, escalabilidade automática e gerenciamento simplificado de infraestrutura, o que facilita o processo de implantação e gerenciamento da aplicação.
-
Implantação em Container Docker:
- Nesta abordagem, você empacota sua aplicação e suas dependências em um contêiner Docker, que pode ser implantado em qualquer ambiente compatível com Docker.
- É necessário criar um arquivo de configuração Dockerfile para a aplicação e construir a imagem do contêiner.
- Depois de construir a imagem, você pode implantar o contêiner em qualquer host que execute o Docker Engine, como servidores físicos, máquinas virtuais ou clusters de contêineres gerenciados.
- O uso de contêineres Docker oferece portabilidade, consistência de ambiente e isolamento de recursos, o que pode ser vantajoso para ambientes de desenvolvimento, teste e produção.
Note
Cada abordagem tem suas próprias vantagens e desvantagens, e a escolha entre elas dependerá das necessidades específicas do seu projeto, dos requisitos de escalabilidade, do orçamento e da preferência pessoal. Certifique-se de avaliar cuidadosamente cada opção antes de decidir qual é a melhor para sua aplicação.
Copyright © 2024 Paulo Pires.
Este projeto está sob a licença MIT. Consulte o arquivo LICENSE para obter mais detalhes.
- Agradeço ao IFES - Instituto Federal do Espírito Santo pelo apoio através do projeto Reprograme-se, assim como professores e colegas.
- Contribuições e sugestões são sempre bem-vindas.
- Muito obrigado! 💙