Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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

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` — та ж перевірка лінтера, але з автоматичними виправленнями простих помилок