Neste projeto, desenvolvi uma API e um banco de dados para a produção de conteúdo para um blog!
A aplicação foi desenvolvida em Node.js usando o pacote sequelize para fazer um CRUD de posts;
A Api foi desenvolvida seguindo a arquitetura de software de camadas MSC (Model Service Controller);
Desenvolvi endpoints que estão conectados ao banco de dados seguindo os princípios do REST;
- JavaScript;
- Docker;
- Express;
- Node;
- Mysql;
- Sequelize
Clone o projeto
git clone git@github.com:yuryss98/project-blogs-api.git
Vá para o diretório do projeto:
cd project-blogs-api
Execute os seguintes comandos:
docker-compose up -d --build
docker exec -it blogs_api bash
npm install
npm run db
npm run start
Depois de executar todos os comandos, ja teremos uma aplicação rodando na porta 3000, e um banco de dados criado e populado, com isso estamos prontos para consumir os devidos endpoints!!
Endpoints: todos os endpoints são acessiveis a partir da rota http://localhost:3000
POST /login
-- O método POST em /login quando executado com um email e senha corretos retorna um token, token esse que é usado para poder acessar outras rotas da api, aceita 2 campos, sendo eles:
-- email: campo do tipo texto, tem que ser um email no formato valido exemplo => "lewishamilton@gmail.com" - CAMPO OBRIGATORIO;
-- password: campo do tipo texto, tem que ser de no minimo 6 caracters exemplo => "123456" - CAMPO OBRIGATORIO;
EXEMPLO:
{
"email": "lewishamilton@gmail.com",
"password": "123456"
}
POST /user
-- O método POST em /user é usado para criar um usuario, quando criado com sucesso retorna um token, token esse que é usado para poder acessar outras rotas da api, aceita 4 campos, sendo eles:-- displayName: campo do tipo texto de no minimo 8 caracters - CAMPO OBRIGATORIO;
-- email: campo do tipo texto, tem que ser um email no formato valido => exemplo@exemplo.com - CAMPO OBRIGATORIO;
-- password: campo do tipo texto de no minimo 6 caracters - CAMPO OBRIGATORIO;
-- image: campo do tipo texto, aqui pode colocar a url de alguma imagem - CAMPO NÃO OBRIGATORIO;
EXEMPLO:
{
"displayName": "testando",
"email": "teste@teste.com",
"password": "123456"
}
👉 ## A partir daqui, todos os endpoints necessitaram de ter um token no header da requisição com a chave "Authorization", então não esqueça de guarda-lo, lembrando que cada token gerado expira em no máximo 1 hora!!
GET /user
-- O método GET em /user é usado para listar todos os usuarios da nossa aplicação;GET /user/id
-- O método GET em /user/id é usado para listar um usuario especifico, onde id é o id do usuario no banco de dados;DELETE /user/me
-- O método DELETE em /user/me é usado para deletar o próprio usuario que está logado no sistema atualmente;GET /categories
-- O método GET em /categories é usado para listar todas as categorias de posts em nossa aplicação;POST /categories
-- O método POST em /categories é usado para criar uma categoria, aceita 1 campo, sendo ele:-- name: campo do tipo texto de no minimo 5 caracters - CAMPO OBRIGATORIO;
EXEMPLO:
{
"name": "nova categoria"
}
GET /post
-- O método GET em /post é usado listar todos os posts criados juntamente com suas categorias e o usuario que o criou;GET /post/search
-- O método GET em /post/search é usado listar todos os posts que contenham em title ou content a palavra pesquisada na query.EXEMPLO:
http://localhost:3000/post/search?q=vamos que vamos
GET /post/id
-- O método GET em /post/id é usado para listar um post especifico, onde id é o id do post no banco de dados;POST /post
-- O método POST em /post é usado para criar um post, aceita 3 campos, sendo eles:-- title: campo do tipo texto de no minimo 1 caracters - CAMPO OBRIGATORIO;
-- content: campo do tipo texto de no minimo 1 caracters - CAMPO OBRIGATORIO;
-- categoryIds: campo do tipo array (lista) de no minimo 1 item e o item tem que ser do tipo numérico - CAMPO OBRIGATORIO;
EXEMPLO:
{
"title": "criando um post",
"content": "post devidamente criado",
"categoryIds": [1, 2]
}
PUT /post/id
-- O método PUT em /post/id é usado para atualizar um post especifico onde id é o seu id no banco de dados, aceita 2 campos, sendo eles:-- title: campo do tipo texto de no minimo 1 caracters - CAMPO OBRIGATORIO;
-- content: campo do tipo texto de no minimo 1 caracters - CAMPO OBRIGATORIO;
EXEMPLO:
{
"title": "atualizando o post",
"content": "post devidamente atualizado"
}