Para rodar essa aplicação, você precisará das seguintes ferramentas instaladas:
- Node Package Manager que pode ser encontrado clicando aqui.
- Node para executar o Javascript fora do navegador. Pode ser encontrado clicando aqui.
- Git para poder clonar e ter acesso a opções de versionamento, pode ser encontrado clicando aqui.
- MySQL para gerar o banco de dados, que pode ser encontrado clicando aqui.
- 1 - Escolha um diretório de sua preferência e clone esse repositório escrevendo em seu terminal o seguinte comando:
git clone git@github.com:LeomarLinhares/blogs-api.git
- 2 - Caminhe até o diretório criado:
cd blogs-api
- 3 - Instale as dependências:
npm install
- 4 - Inicie a aplicação:
npm start
- Node.js - Software para permitir execução de Javascript fora do navegador web.
- Express - Framework para criação do servidor.
- Sequelize - ORM para mapeamento e comunicação com o banco de dados.
- JWT - Criação de tokens com assinatura.
Este projeto possui o objetivo principal de servir a blogs conteúdos de seu banco de dados. É ele quem vai fazer a integração das informações que estão salvas no servidor com o seu front-end.
O sistema é composto por um banco de dados e uma API Rest que utiliza da arquitetura MSC para realizar as operações CRUD. As ferramentas utilizadas para o desenvolvimento incluem Node.js, Express e JWT para autenticações e MySQL atuando como sistema gerenciador de banco de dados relacional. Entretanto pode ser utilizado com os frameworks de banco de dados que o Sequelize cobre.
Rotas utilizadas pela aplicação web para executar metodos de POST, GET, PUT e DELETE no banco de dados. Onde o retorno de cada uma das funções estara contido em um endpoint.
Nome | Funcionalidade |
---|---|
POST /user |
Cria um usuário ao enviar um body JSON com o seguinte formato |
POST /login |
Permite que um usuário logue ao enviar um body JSON com o seguinte formato |
GET /user |
Retorna um JSON com um array no seguinte formato |
GET /user:id |
Retorna detalhes do usuário no seguinte formato |
POST /categories |
Cria uma categoria ao enviar um body JSON com o seguinte formato |
GET /categories |
Retorna um array de categorias no seguinte formato |
POST /post |
Cria um post ao enviar um body JSON com o seguinte formato |
GET /post |
Retorna um array de posts com o seguinte formato |
GET /post:id |
Retorna detalhes do post no seguinte formato |
PUT /post:id |
Atualiza um post ao enviar um body JSON com o seguinte formato |
DELETE /post:id |
Deleta o post com o id especificado e não tem retorno |
DELETE /user/me |
Deleta um usuário autenticado e não tem retorno |
// envia
{
"displayName": "Leomar Linhares",
"email": "exemplo@exemplo.com",
"password": "senha_segura",
"image": "https://picsum.photos/200"
}
// retorna
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwYXlsb2FkIjp7ImlkIjo1LCJkaXNwbGF5TmFtZSI6InVzdWFyaW8gZGUgdGVzdGUiLCJlbWFpbCI6InRlc3RlQGVtYWlsLmNvbSIsImltYWdlIjoibnVsbCJ9LCJpYXQiOjE2MjAyNDQxODcsImV4cCI6MTYyMDY3NjE4N30.Roc4byj6mYakYqd9LTCozU1hd9k_Vw5IWKGL4hcCVG8"
}
// envia
{
"email": "email@mail.com",
"password": "123456"
}
// retorna
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwYXlsb2FkIjp7ImlkIjo1LCJkaXNwbGF5TmFtZSI6InVzdWFyaW8gZGUgdGVzdGUiLCJlbWFpbCI6InRlc3RlQGVtYWlsLmNvbSIsImltYWdlIjoibnVsbCJ9LCJpYXQiOjE2MjAyNDQxODcsImV4cCI6MTYyMDY3NjE4N30.Roc4byj6mYakYqd9LTCozU1hd9k_Vw5IWKGL4hcCVG8"
}
// retorna
[
{
"id": "401465483996",
"displayName": "Leomar Linhares",
"email": "exemplo@exemplo.com",
"image": "https://picsum.photos/200"
}
]
// retorna
{
"id": "401465483996",
"displayName": "Leomar Linhares",
"email": "exemplo@exemplo.com",
"image": "https://picsum.photos/200"
}
// envia
{
"name": "Tecnologia"
}
// retorna
[
{
"id": 1,
"name": "Escola"
},
{
"id": 2,
"name": "Tecnologia"
}
]
// envia
{
"title": "Latest updates, August 1st",
"content": "The whole text for the blog post goes here in this key",
"categoryIds": [1, 2]
}
// retorna
[
{
"id": 1,
"title": "Post do Ano",
"content": "Melhor post do ano",
"userId": 1,
"published": "2011-08-01T19:58:00.000Z",
"updated": "2011-08-01T19:58:51.000Z",
"user": {
"id": 1,
"displayName": "Leomar Linhares",
"email": "exemplo@exemplo.com",
"image": "https://picsum.photos/200"
},
"categories": [
{
"id": 1,
"name": "Inovação"
}
]
}
]
// retorna
{
"id": 1,
"title": "Post do Ano",
"content": "Melhor post do ano",
"userId": 1,
"published": "2011-08-01T19:58:00.000Z",
"updated": "2011-08-01T19:58:51.000Z",
"user": {
"id": 1,
"displayName": "Leomar Linhares",
"email": "exemplo@exemplo.com",
"image": "https://picsum.photos/200"
},
"categories": [
{
"id": 1,
"name": "Inovação"
}
]
}
// envia
{
"title": "Latest updates, August 1st",
"content": "The whole text for the blog post goes here in this key"
}
// não envia nada e não possuí retorno, apenas deleta o post com o id especificado.
// não envia nada e não possuí retorno, apenas deleta o usuário autenticado.