Перейти к основному содержимому

Динамический контент (поиск, фильтры, пагинация)

Добавим поиск, фильтры и пагинацию, чтобы пользователям было проще находить нужное.

Почему это важно:

  • Поиск: находить по ключевым словам
  • Фильтры: жанр, год, рейтинг и т. п.
  • Пагинация: эффективно работать с большими каталогами

Поиск

Обновите манифест, добавив возможность search в каталоге фильмов:

{
"catalogs": [
{
"id": "movieCatalog",
"type": "movie",
"name": "Hello, Movies",
"extra": [
{"name": "search", "isRequired": false}
]
}
]
}

Запросы поиска:

GET /catalog/movie/movieCatalog/search=jellyfish.json

Создайте файл catalog/movie/movieCatalog/search=hello.json с результатами.

Фильтры по жанрам

Обновите манифест:

{
"catalogs": [
{
"id": "movieCatalog",
"type": "movie",
"name": "Hello, Movies",
"extra": [
{"name": "search", "isRequired": false},
{"name": "genre", "isRequired": false}
],
"genres": ["Adventure", "Family", "Sci-Fi", "Demo"]
}
]
}

Создайте файлы genre=Adventure.json, genre=Sci-Fi.json, и т. п. Возвращайте пустой список, если жанр объявлен, но элементов нет.

Пагинация

Добавьте skip:

{
"catalogs": [
{
"id": "movieCatalog",
"type": "movie",
"name": "Hello, Movies",
"extra": [
{"name": "search", "isRequired": false},
{"name": "genre", "isRequired": false},
{"name": "skip", "isRequired": false}
]
}
]
}

Шаблон запросов:

  1. /catalog/movie/movieCatalog.json
  2. /catalog/movie/movieCatalog/skip=100.json
  3. /catalog/movie/movieCatalog/skip=200.json

Возвращайте пустой список, когда данные закончились. Можно добавлять метаданные пагинации:

{"page": 2, "totalPages": 12, "metas": []}

Расширенные фильтры

Поддерживаются genreMulti, genreExclude, releaseYear, originalLanguage, releaseDateRange, tmdbRatingRange, productionCountry, pagination и др.

Итоги

  • Поиск помогает быстро находить контент
  • Фильтры упрощают навигацию
  • Пагинация масштабирует каталоги
  • Всегда возвращайте валидные ответы для объявленных возможностей