0Pricing
Elixir & Phoenix: Scalable Backend Development · Урок

Разбиение на страницы, фильтрация и версионирование API

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

«Разбиение на страницы, фильтрация и версионирование API» — бесплатный урок Elixir & Phoenix: Scalable Backend Development на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Elixir & Phoenix: Scalable Backend Development, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Elixir & Phoenix: Scalable Backend Development содержит 4 уроков всего.

Части этого урока еще не переведены и отображаются на английском.

Why Pagination Matters

Returning every record in one response is slow and memory-heavy. Pagination sends data in manageable pages.

Offset-Based Pagination

The classic approach uses limit and offset driven by query params like ?page=2&per_page=20.

from(p in Post, limit: ^per_page, offset: ^((page - 1) * per_page))

Returning Page Metadata

Clients need to know totals. Include metadata such as current page, page size, and total count alongside the data.

%{
  data: posts,
  meta: %{page: 2, per_page: 20, total: 137}
}

The Downside of Offset

Large offsets get slow because the database still scans skipped rows, and rows shifting between requests cause duplicates.

Cursor-Based Pagination

Cursor pagination uses the last seen value (often an id or timestamp) to fetch the next page, staying fast and stable.

from(p in Post,
  where: p.id > ^cursor,
  order_by: [asc: p.id],
  limit: ^limit)

Filtering Results

Let clients narrow results with query params. Build the query conditionally based on which params are present.

def filter(query, %{"status" => status}) do
  from(q in query, where: q.status == ^status)
end
def filter(query, _), do: query

Composing Multiple Filters

Reduce over a params map to apply each supported filter, keeping the query composable and safe from injection via parameter binding.

Enum.reduce(params, base_query, fn
  {"author", a}, q -> from(p in q, where: p.author == ^a)
  _, q -> q
end)

Sorting

Accept a sort param and map it to a safe whitelist of allowed columns to avoid arbitrary ordering.

order = case params["sort"] do
  "newest" -> [desc: :inserted_at]
  _ -> [asc: :id]
end

Why Version Your API?

Versioning lets you evolve the API without breaking existing clients when you change response shapes or behavior.

URL Path Versioning

The most common strategy puts the version in the path, scoped in the router.

scope "/api/v1", MyAppWeb.V1 do
  pipe_through :api
  resources "/posts", PostController
end

Header-Based Versioning

Alternatively, select the version from an Accept header so URLs stay stable. Choose ONE strategy and stay consistent.

# Accept: application/vnd.myapp.v2+json

Quick Check

Test your API scaling knowledge.

Recap

You made APIs scalable and durable:

  • Paginate with offset (simple) or cursor (fast, stable)
  • Return page metadata with the data
  • Apply composable, parameter-bound filters and whitelisted sorting
  • Version via URL path or Accept header, consistently

Часто задаваемые вопросы

Урок «Разбиение на страницы, фильтрация и версионирование API» бесплатный?

Да — полный текст урока «Разбиение на страницы, фильтрация и версионирование API» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Elixir & Phoenix: Scalable Backend Development, подпишись на CoddyKit PRO. Курс Elixir & Phoenix: Scalable Backend Development содержит 4 уроков всего.

Чему я научусь в уроке «Разбиение на страницы, фильтрация и версионирование API»?

Делайте API Phoenix масштабируемыми и удобными в сопровождении с помощью разбиения запросов на страницы, гибкой фильтрации и ясных стратегий версионирования. Ты практикуешь Elixir & Phoenix: Scalable Backend Development с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Elixir & Phoenix: Scalable Backend Development?

Предыдущий опыт не требуется. Elixir & Phoenix: Scalable Backend Development на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Разбиение на страницы, фильтрация и версионирование API»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Elixir & Phoenix: Scalable Backend Development?

Да. Каждый урок Elixir & Phoenix: Scalable Backend Development включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Принципы и рекомендации по проектированию API
  2. Реализация конечных точек API и сериализация
  3. Стратегии аутентификации и авторизации
  4. Разбиение на страницы, фильтрация и версионирование API
← Назад к Elixir & Phoenix: Scalable Backend Development