Разбиение на страницы, фильтрация и версионирование 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: queryComposing 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]
endWhy 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
endHeader-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+jsonQuick 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 — локальная установка не требуется.
Все уроки этого курса
- Принципы и рекомендации по проектированию API
- Реализация конечных точек API и сериализация
- Стратегии аутентификации и авторизации
- Разбиение на страницы, фильтрация и версионирование API