API (Application Programming Interface) desenvolvida em NodeJS com MongoDB e MongoDB Atlas. Utiliza arquitetura em camadas (MSC - Model Service Controllers) e constitui parte integrante de uma aplicação fullstack com o objetivo de fazer o gerenciamento de uma lista de tarefas a partir da criação, atualização e remoção de cada tarefa. Estas operações podem ser realizadas por usuários previamente cadastrados, através de uma tela de cadastro, tendo o acesso à tela de tarefas através de uma tela de login.
Veja a aplicação no ar por este link: https://frontend-todolist.vercel.app/register
Acesse a parte de front-end deste projeto em: https://github.com/cristianocsl/frontend_todolist
Para as requisições a seguir deve ser utilizado este link: https://backend-todo-list-cristiano.herokuapp.com
- o corpo da requisição deve ter o seguinte formato:
{
"name": "Nome do Usuário",
"email": "email@exemplo.com",
"password": "senhasenha",
}
-
name deve ser uma string com três ou mais caracteres;
-
email deve ser uma string e ter formato compatível com email;
-
senha deve ser uma string com 6 ou mais caracteres;
Casos de falha na validação da requisição terão resposta com status 400
e uma mensagem de erro como os exemplos abaixo:
Campo name não preenchido:
{
"message": "\"name\" is not allowed to be empty"
}
Campo email não preenchido:
{
"message": "\"email\" is not allowed to be empty"
}
Campo password não preenchido:
{
"message": "\"password\" is not allowed to be empty"
}
Campo name com menos de três caracteres:
{
"message": "\"name\" length must be at least 3 characters long"
}
Campo password com menos de 6 carecteres:
{
"message": "\"password\" length must be at least 6 characters long"
}
Campo email com formato inválido:
{
"message": "\"email\" must be a valid email"
}
Campo email com email que já existe no banco de dados (status 409
):
{
"message": "User already registered"
}
Casos de sucesso na validação da requisição terão resposta com status 201
, uma mensagem de sucesso acompanhada pelo nome do usuário e o token de acesso:
{
"message": "User registered successfully!",
"name": "my name",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2MjI0MzkyZmNkYzVhODE4NGUxZDM0NmIiLCJuYW1lIjoiYXNkc2FkdyIsImVtYWlsIjoibGxsLWNjcmlzdGlhbm5vQGdtYWlsLmNvbSIsImlhdCI6MTY0NjU0MTEwNCwiZXhwIjoxNjQ3NzUwNzA0fQ.IJmBCQLwpqgMIczzYSO5t3FFqcNTVdmtN-k2WNar2ls"
}
- o corpo da requisição deve ter o seguinte formato:
{
"email": "email@exemplo.com",
"password": "senhasenha",
}
-
email deve ser uma string e ter formato compatível com email;
-
senha deve ser uma string com 6 ou mais caracteres;
Casos de falha na validação da requisição terão resposta com status 400
e uma mensagem de erro como os exemplos abaixo:
Campo email não preenchido:
{
"message": "\"email\" is not allowed to be empty"
}
Campo password não preenchido:
{
"message": "\"password\" is not allowed to be empty"
}
Campo email com formato inválido:
{
"message": "\"email\" must be a valid email"
}
Campo password com menos de 6 carecteres:
{
"message": "\"password\" length must be at least 6 characters long"
}
Campo email com um email que não existe no banco de dados:
{
"message": "User does not exist or email is incorrect"
}
Campo senha com uma senha diferente da que existe no banco de dados:
{
"message": "Incorrect passoword"
}
Casos de sucesso na validação da requisição terão resposta com status 200
, uma mensagem de sucesso acompanhada pelo nome do usuário e o token de acesso:
{
"message": "Login successfully!",
"name": "my name",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2MjI0MzkyZmNkYzVhODE4NGUxZDM0NmIiLCJuYW1lIjoiYXNkc2FkdyIsImVtYWlsIjoibGxsLWNjcmlzdGlhbm5vQGdtYWlsLmNvbSIsImlhdCI6MTY0NjU0MTEwNCwiZXhwIjoxNjQ3NzUwNzA0fQ.IJmBCQLwpqgMIczzYSO5t3FFqcNTVdmtN-k2WNar2ls"
}
- o corpo da requisição deve ter o seguinte formato:
{
"task": "Minha tarefa de hoje",
}
Casos de falha na validação da requisição terão resposta com status 400
e a seguinte mensagem de erro:
Campo task não preenchido:
{
"message": "\"task\" is not allowed to be empty"
}
Caso de falha na requisição devido a token terá como resposta o status 401
acompanhado da seguinte mensagem:
Caso de token inválido ou expirado:
{
"message": "Expired or invalid token"
}
Casos de sucesso na validação da requisição terão resposta com status 201
e um objeto json com as seguintes chaves:
- _id: identificador da tarefa criada;
- task: tarefa inserida pelo usuário;
- userId: identificador do usuário, criado no momento de seu cadastro no banco de dados;
- createdAt: data de criação da tarefa, inserida automaticamente no momento de sua criação;
- status: classificador do estado da tarefa criada, que, no momento da criação da tarefa, é automaticamente definido como "To do", podendo ser modificado pelo usuário após a criação da tarefa.
{
"_id": "6224cc1d512edf339950f1f8",
"task": "Minha tarefa de hoje",
"userId": "6224392fcdc5a8184e1d346b",
"createdAt": "06/03/2022 11:58:37",
"status": "To do"
}
Caso de falha na requisição devido a token terá como resposta o status 401
acompanhado da seguinte mensagem:
Caso de token inválido ou expirado:
{
"message": "Expired or invalid token"
}
Casos de sucesso na validação da requisição terão resposta com status 200
com a seguinte estrutura:
[
{
"_id": "6224cc1d512edf339950f1f8",
"task": "Minha tarefa número 1 de hoje",
"userId": "6224392fcdc5a8184e1d346b",
"createdAt": "06/03/2022 11:58:37",
"status": "To do"
},
{
"_id": "6224d588512edf339950f1f9",
"task": "Minha tarefa número 2 de hoje",
"userId": "6224392fcdc5a8184e1d346b",
"createdAt": "06/03/2022 12:38:48",
"status": "To do"
}
]
Casos de falha na validação da requisição terão resposta com status 400
e a seguinte mensagem de erro:
Campo task não preenchido:
{
"message": "\"task\" is not allowed to be empty"
}
Caso de falha na requisição devido a um identificador incorreto da tarefa terá como resposta o status 404
acompanhado da seguinte mensagem:
Caso de identificador incorreto da tarefa:
{
"message": "Task does not exist"
}
Caso de falha na requisição devido a um identificador da tarefa com tamanho incompatível com o do identificador do MongoDB terá como resposta o status 400
acompanhado da seguinte mensagem:
Caso de identificador com tamanho incompatível com o do mongodb:
{
"message": "Mongodb id must be 24 characters"
}
Casos de sucesso na validação da requisição terão resposta com status 200
com a seguinte mensagem:
{
"message": "Task updated successfully"
}
Caso de falha na requisição devido a um identificador incorreto da tarefa terá como resposta o status 404
acompanhado da seguinte mensagem:
Caso de identificador incorreto da tarefa:
{
"message": "Task does not exist"
}
Caso de falha na requisição devido a um identificador da tarefa com tamanho incompatível com o do identificador do MongoDB terá como resposta o status 400
acompanhado da seguinte mensagem:
Caso de identificador com tamanho incompatível com o do mongodb:
{
"message": "Mongodb id must be 24 characters"
}
Caso de sucesso na validação da requisição terá resposta com status 204
e ausência de mensagem.
- Javascript;
- MongoDB Atlas: serviço de banco de dados de documentos em nuvem global para aplicações modernas;
- Node.js;
- Heroku: plataforma de hospedagem, configuração, testagem e publicação de projetos virtuais na nuvem.
- body-parser: analise dos corpos de solicitação de entrada em um middleware antes de seus manipuladores;
- cors: habilita requisições do front-end;
- date-fns: conversão e opções de formato de datas;
- dotenv: carrega variáveis de ambiente para deploy;
- Express: criação e manipulação de rotas;
- eslint: padrão de estilização de código;
- http-status-codes: facilitar legibilidade dos códigos http;
- joi: validação de requisições;
- jsonwebtoken: realiza autenticação entre duas partes por meio de um token assinado que autentica uma requisição web;
- bcrypt: criptografia;
- mongodb: comunicação com bancos de dados;
- nodemon: permite modo watch do servidor durante o desenvolvimento.
- cobertura de testes;
- Email: cslcristiano@gmail.com
- LinkedIn: https://www.linkedin.com/in/cristianoseabralima/
- Github: https://github.com/cristianocsl
Cristiano Seabra de Lima
Desenvolvedor WEB FullStack em constante aprendizado e entusiasta por tecnologia e sua força transformadora no mundo!