Paginación, filtrado y versionado de API
Haga que las API de Phoenix sean escalables y fáciles de mantener mediante paginación de consultas, filtrado flexible y estrategias claras de versionado.
Paginación, filtrado y versionado de API es una lección gratuita de Elixir & Phoenix: Scalable Backend Development en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Elixir & Phoenix: Scalable Backend Development, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Elixir & Phoenix: Scalable Backend Development incluye 4 lecciones en total.
Partes de esta lección aún no han sido traducidas y se muestran en inglés.
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
Preguntas frecuentes
¿La lección «Paginación, filtrado y versionado de API» es gratis?
Sí — el texto completo de «Paginación, filtrado y versionado de API» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Elixir & Phoenix: Scalable Backend Development, actualiza a CoddyKit PRO. El curso de Elixir & Phoenix: Scalable Backend Development incluye 4 lecciones en total.
¿Qué aprenderé en «Paginación, filtrado y versionado de API»?
Haga que las API de Phoenix sean escalables y fáciles de mantener mediante paginación de consultas, filtrado flexible y estrategias claras de versionado. Practicas Elixir & Phoenix: Scalable Backend Development con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Elixir & Phoenix: Scalable Backend Development?
No se requiere experiencia previa. Elixir & Phoenix: Scalable Backend Development en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Paginación, filtrado y versionado de API»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Elixir & Phoenix: Scalable Backend Development?
Sí. Cada lección de Elixir & Phoenix: Scalable Backend Development incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Principios y buenas prácticas de diseño de API
- Implementación de endpoints de API y serialización
- Estrategias de autenticación y autorización
- Paginación, filtrado y versionado de API