Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/yevhenii2022/node-js-hw-rest-api
Побудова REST API
https://github.com/yevhenii2022/node-js-hw-rest-api
bcrypt cors cross-env dotenv express gravatar jest jimp joi-validation jsonwebtoken mongodb-atlas mongodb-compass mongoose morgan multer node-js nodemailer nodemon postman supertest
Last synced: about 22 hours ago
JSON representation
Побудова REST API
- Host: GitHub
- URL: https://github.com/yevhenii2022/node-js-hw-rest-api
- Owner: Yevhenii2022
- Created: 2023-07-26T05:08:57.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2023-08-19T06:20:56.000Z (over 1 year ago)
- Last Synced: 2024-04-23T06:20:04.853Z (9 months ago)
- Topics: bcrypt, cors, cross-env, dotenv, express, gravatar, jest, jimp, joi-validation, jsonwebtoken, mongodb-atlas, mongodb-compass, mongoose, morgan, multer, node-js, nodemailer, nodemon, postman, supertest
- Language: JavaScript
- Homepage:
- Size: 784 KB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
Awesome Lists containing this project
README
# Postman
Щоб перевірити роботу REST API пиши так:
## Базові ендпоінти
### GET http://localhost:3000/api/contacts
`Відповідь` — повертається масив всіх контактів в json-форматі зі статусом 200
### GET http://localhost:3000/api/contacts/:id
`Відповідь` — якщо такий id є, повертається об'єкт контакту в json-форматі зі статусом 200; якщо такого id немає, повертається json з ключем "message": "not found" і статусом 404
### POST http://localhost:3000/api/contacts
Отримує body в форматі {name, email, phone} (усі поля обов'язкові та мають бути стрінгами)
`Відповідь` — якщо в body немає якихось обов'язкових полів або вони не строки, повертається json з ключем {"message": "missing required field(s) / non-string field(s)"} і статусом 400; якщо з body все добре, додає унікальний ідентифікатор в об'єкт контакту i повертається об'єкт з доданим id {id, name, email, phone} і статусом 201### DELETE http://localhost:3000/api/contacts/:id
`Відповідь` — якщо такий id є, повертається json формату {"message": "contact deleted"} і статусом 200; якщо такого id немає, повертається json з ключем "message": "not found" і статусом 404
### PUT http://localhost:3000/api/contacts/:id
Отримує body в json-форматі c оновленням будь-яких полів name, email и phone (валідадія присутня як у додавані контакту)
`Відповідь` — якщо з body всe добре - повертається оновлений об'єкт контакту зі статусом 200, інакше повертається json з ключем "message": "not found" і статусом 404### PATCH http://localhost:3000/api/contacts/:id/favorite
Отримує body в json-форматі з оновленням поля favorite (має бути значення boolean)
`Відповідь` — якщо в body немає якихось обов'язкових полів або вони не строки, повертається json з ключем {"message":"missing field favorite"} і статусом 400; якщо з body всe добре - повертається оновлений об'єкт контакту зі статусом 200, інакше повертається json з ключем "message": "not found" і статусом 404## Аутентифікація
### POST http://localhost:3000/api/auth/register
Отримує body в форматі {email, password, subscription} (перші два поля обов'язкові, всі поля мають бути стрінгами, валідація присутня)
`Відповідь` — при помилці валідації повертається "Помилка від Joi або іншої бібліотеки валідації" зі статусом 400; якщо пошта вже використовується кимось іншим повертається ResponseBody: {"message": "Email in use"} зі статусом 409; якщо з body все добре повертається об'єкт наступного виду { "user": { "email": "[email protected]", "subscription": "starter" } } і статусом 201 (поле subscription додається по замовчуванню, якщо його не вказати при реєстрації через налаштування моделі "user" - subscription: { type: String, enum: ["starter", "pro", "business"], default: "starter" })### POST http://localhost:3000/api/auth/login
Отримує body в форматі {email, password} (всі поля обов'язкові та мають бути стрінгами, валідація присутня)
`Відповідь` — при помилці валідації повертається "Помилка від Joi або іншої бібліотеки валідації" зі статусом 400; якщо пароль або email невірний повертається ResponseBody: {"message": "Email or password is wrong"} зі статусом 401; якщо з body все добре шукається пароль для користувача в БД, якщо пароль знаходиться створюється токен, зберігається в поточному полі юзера і повертається об'єкт наступного виду ResponseBody: { "token": "exampletoken", "user": { "email": "[email protected]", "subscription": "starter" } } і статусом 200### POST http://localhost:3000/api/auth/logout
Отримує пусте body з обовʼязковим заголовком Authorization: "Bearer {{token}}"
`Відповідь` — якщо користувача у моделі "user" за \_id не існує повертається ResponseBody: {"message": "Not authorized"} і статус 401; в іншому випадку, видаляється токен у поточного юзера і повертається статус 204### GET http://localhost:3000/api/auth/current
Запит відправляється з обовʼязковим заголовком Authorization: "Bearer {{token}}"
`Відповідь` — якщо користувача не існує повертається ResponseBody: {"message": "Not authorized"} і статус 401; в іншому випадку повертається ResponseBody: { "email": "[email protected]", "subscription": "starter" } і статус 200### Команди:
- `npm start` — старт сервера в режимі production
- `npm run start:dev` — старт сервера в режимі розробки (development)
- `npm run lint` — запустити виконання перевірки коду з eslint, необхідно виконувати перед кожним PR та виправляти всі помилки лінтера
- `npm run lint:fix` — та ж перевірка лінтера, але з автоматичними виправленнями простих помилок