/blogs-api

Esse projeto é uma API preparada para ser usada em blogs. Ela é um CRUD que pode gerenciar usuários e publicações. Além de ter sistema de autenticação.

Primary LanguageJavaScript

Blogs API

Uma imagem relacionada ao projeto

Inicialização

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.

Passos pós instalação:

  • 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

Ferramentas utilizadas no desenvolvimento

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

Blogs API

Introdução

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.


Análise técnica

  • Descrição do ambiente técnico

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.


  • Mensagens internas

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

  • Formatos de requisição e retornos

POST /user

// envia
{
  "displayName": "Leomar Linhares",
  "email": "exemplo@exemplo.com",
  "password": "senha_segura",
  "image": "https://picsum.photos/200"
}

// retorna
{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwYXlsb2FkIjp7ImlkIjo1LCJkaXNwbGF5TmFtZSI6InVzdWFyaW8gZGUgdGVzdGUiLCJlbWFpbCI6InRlc3RlQGVtYWlsLmNvbSIsImltYWdlIjoibnVsbCJ9LCJpYXQiOjE2MjAyNDQxODcsImV4cCI6MTYyMDY3NjE4N30.Roc4byj6mYakYqd9LTCozU1hd9k_Vw5IWKGL4hcCVG8"
}

POST /login

// envia
{
  "email": "email@mail.com",
  "password": "123456"
}

// retorna
{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwYXlsb2FkIjp7ImlkIjo1LCJkaXNwbGF5TmFtZSI6InVzdWFyaW8gZGUgdGVzdGUiLCJlbWFpbCI6InRlc3RlQGVtYWlsLmNvbSIsImltYWdlIjoibnVsbCJ9LCJpYXQiOjE2MjAyNDQxODcsImV4cCI6MTYyMDY3NjE4N30.Roc4byj6mYakYqd9LTCozU1hd9k_Vw5IWKGL4hcCVG8"
}

GET /user

// retorna
[
  {
    "id": "401465483996",
    "displayName": "Leomar Linhares",
    "email": "exemplo@exemplo.com",
    "image": "https://picsum.photos/200"
  }
]

GET /user:id

// retorna
{
  "id": "401465483996",
  "displayName": "Leomar Linhares",
  "email": "exemplo@exemplo.com",
  "image": "https://picsum.photos/200"
}

POST /categories

// envia
 {
   "name": "Tecnologia"
 }

GET /categories

// retorna
[
  {
    "id": 1,
    "name": "Escola"
  },
  {
    "id": 2,
    "name": "Tecnologia"
  }
]

POST /post

// envia
{
  "title": "Latest updates, August 1st",
  "content": "The whole text for the blog post goes here in this key",
  "categoryIds": [1, 2]
}

GET /post

// 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"
      }
    ]
  }
]

GET /post:id

// 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"
    }
  ]
}

PUT /post:id

// envia
{
  "title": "Latest updates, August 1st",
  "content": "The whole text for the blog post goes here in this key"
}

DELETE /post:id

// não envia nada e não possuí retorno, apenas deleta o post com o id especificado.

DELETE /user/me

// não envia nada e não possuí retorno, apenas deleta o usuário autenticado.