REST
ЛР27
Создаем на Github репозиторий cwp-27, клонируем его, открываем в IDE
Устанавливаем express, sequelize и joi
Будем разрабатывать REST API для веб-приложения по типу Twitter
Опишем модели данных
User:
"id": int / autoincrement
"name": string
"email": string
Tweet:
"id": int / autoincrement
"message": string
"publishedOn": string
"authorId": int / reference to Users
Like:
"id": int / autoincrement
"tweerId": int / reference to Tweets
"authorId": int / reference to Users
Создадим набор REST API endpoint-ов для предоставления фукционала клиентской части
1. Пять endpoint-ов для CRUD операций с пользователями
2. Пять endpoint-ов для CRUD операций с твитами (будет вложены в путь пользователей)
3. Два endpoint-а для создания/удаления лайков (будет вложены в путь твитов пользователей)
4. Endpoint для чтения всех твитов от всех пользователей (получение всех твитов)
Добавим валидацию на методы создания/обновления с помощью joi
Добавим постраничную навигацию при получении всех твитов с возможностью выбрать лимит от 5 до 20 (10 по-умолчанию). Ответ должен быть в формате:
{
  "tweets": [...],
  "meta": {
    "offset": 0,
    "count": 54,
    "limit": 10,
    "pages": 6,
    "page": 1
  }
}
Добавим сортировку при получении всех твитов с возможностью выбрать поля и порядок сортировки. Допустимые поля - publishedOn (по-умолчанию), author.name. Допустимые порядки - desc (по-умолчанию), asc. Должна быть возможность сортировки сразу по двум полям. Возможный синтаксис - ...?order=author.name:asc|publishedon:desc. Не забудем добавить в поле meta информацию о сортировке
Добавим фильтрацию при получении всех твитов по полям author.email, publishedAfter и publishedBefore. Должна быть возможность указания нескольких фильтров. Не забудем добавить в поле meta информацию о фильтрах
Реализуем принцип HATEOAS при получении всех твитов добавив каждому твиту массив links c элементами self, next и prev. Примерный вид ответа:
{
  "tweets": [
    ...
    {
      "id": 42,
      ...
      "links": [
        {
          "rel": "self",
          "href": "http://localhost:3000/api/tweets/42"
        },
        ...
      ]
    },
    ...
  ],
  "meta": { ... }
}
Покажите работу всех узлов REST API через Postman
RESTful Best Practices