Skip to content
IRC-CodingIRC-Coding
PaginationFilterOrdenamientoOffset PaginationCursor PaginationKeyset PaginationQuery Parameter

API Pagination, Filter y Ordenamiento: Guía Completa

Domina API Pagination, Filter y Ordenamiento: Offset, Cursor, Keyset, parámetros de búsqueda y mejores prácticas.

S

schutzgeist

6 min read
API Pagination, Filter y Ordenamiento: Guía Completa

Paginación, filtros y ordenamiento en APIs

La paginación, los filtros y el ordenamiento permiten servir grandes volúmenes de datos de forma eficiente, consistente y amigable a través de una API.

Descripción compacta

La paginación limita la cantidad de registros que una API devuelve en una llamada. Previene respuestas grandes y lentas, y protege tanto el servidor como los clientes. Los filtros permiten restringir datos según criterios específicos sin necesidad de crear endpoints separados. El ordenamiento controla el orden de los resultados. Juntos, estos tres mecanismos forman la base para consultas de API flexibles. Los tipos más comunes de paginación son Offset Pagination, Cursor Pagination y Keyset Pagination. Cada uno tiene ventajas e inconvenientes en términos de simplicidad, consistencia y rendimiento. Los filtros y el ordenamiento generalmente se controlan mediante parámetros de query, donde las convenciones claras y los nombres descriptivos son fundamentales. Una buena API documenta sus opciones de paginación y filtrado de manera clara y proporciona en la respuesta metadatos útiles como enlaces, cantidad total o cursores.

Componentes principales

Offset Pagination

Offset Pagination utiliza parámetros como page y offset, junto con limit, para obtener una porción del conjunto de resultados. Ejemplo: ?page=2&limit=20. Este método es simple de implementar y comprender. Los inconvenientes incluyen degradación del rendimiento con valores grandes de offset e inconsistencias cuando el conjunto de resultados cambia entre páginas.

Cursor Pagination

Cursor Pagination utiliza un cursor opaco basado en un valor ordenado. Ejemplo: ?cursor=abc123&limit=20. Ofrece mejor rendimiento y consistencia que Offset Pagination con grandes volúmenes de datos. Los inconvenientes incluyen navegación más complicada hacia páginas arbitrarias y dependencia de un orden único bien definido.

Keyset Pagination

Keyset Pagination es similar a Cursor Pagination, pero utiliza valores explícitos como ?createdAfter=2026-07-01T00:00:00Z&limit=20. Tiene un rendimiento excelente y es muy estable, pero menos flexible cuando se usan múltiples campos de ordenamiento. Es ideal para flujos de datos ordenados por tiempo.

Page y Limit

page y limit son los parámetros clásicos de Offset Pagination. page indica la página, limit la cantidad de elementos por página. Los valores por defecto típicos son page=1 y limit=20. Las APIs deben hacer cumplir un limit máximo para prevenir abusos.

Total Count y Enlaces

Las respuestas deben contener metadatos que faciliten la navegación. Esto incluye total, page, limit, next, prev, first y last. Los enlaces HATEOAS ayudan a los clientes a navegar entre páginas sin necesidad de construir URLs manualmente.

Parámetros de filtro

Los filtros generalmente se controlan mediante parámetros de query. Ejemplos son ?status=active, ?category=books o ?minPrice=10&maxPrice=50. Los filtros deben tener nombres descriptivos, estar documentados y validados. Las combinaciones booleanas pueden expresarse mediante parámetros separados o una sintaxis de consulta de filtros.

Ordenamiento

El ordenamiento se controla frecuentemente mediante parámetros como sort u orderBy. Ejemplos son ?sort=name o ?sort=-createdAt, donde un signo menos indica orden descendente. Las convenciones claras y la documentación son importantes para que los clientes usen la API correctamente.

Parámetro de búsqueda

La búsqueda de texto completo se expresa generalmente mediante un parámetro como q o search, por ejemplo ?q=python. Las búsquedas más complejas pueden implementarse mediante servicios de búsqueda como Elasticsearch u OpenSearch y exponerse a través de una API de búsqueda dedicada.

Combinación de filtros, ordenamiento y paginación

En la práctica, los filtros, el ordenamiento y la paginación se combinan frecuentemente. Ejemplo: ?status=active&sort=-createdAt&page=1&limit=25. La API debe combinar estos parámetros de manera sensata, validarlos y documentarlos. Es importante mantener el orden de las operaciones de forma consistente.

Limit y valores por defecto

Un limit por defecto razonable reduce el volumen de datos y el tiempo de respuesta. Simultáneamente, debe aplicarse un limit máximo para prevenir solicitudes demasiado grandes. Los clientes deben poder elegir el limit dentro de los límites permitidos.

Consistencia con datos en crecimiento

Cuando el volumen de datos cambia durante la paginación, los registros pueden duplicarse o perderse. Cursor Pagination y Keyset Pagination son más estables en este aspecto que Offset Pagination. Con Offset Pagination, los clientes deben estar preparados para inconsistencias o la API debe usar snapshots.

Ejemplo práctico

Una API para productos soporta Offset Pagination, filtros y ordenamiento.

Solicitud:

GET /api/v1/products?category=electronics&minPrice=100&sort=-rating&page=2&limit=10

Respuesta:

{
  "data": [
    { "id": 15, "name": "Laptop", "price": 999, "rating": 4.8 },
    { "id": 22, "name": "Monitor", "price": 299, "rating": 4.7 }
  ],
  "pagination": {
    "page": 2,
    "limit": 10,
    "total": 145,
    "pages": 15,
    "next": "/api/v1/products?category=electronics&minPrice=100&sort=-rating&page=3&limit=10",
    "prev": "/api/v1/products?category=electronics&minPrice=100&sort=-rating&page=1&limit=10"
  }
}

El cliente puede navegar fácilmente mediante los enlaces sin necesidad de reconstruir los filtros y el ordenamiento.

FAQ: Paginación, filtros y ordenamiento

1. ¿Qué es la paginación en APIs?

La paginación limita la cantidad de registros que una API devuelve por solicitud. Previene respuestas grandes y lentas, y protege tanto el servidor como los clientes.

2. ¿Qué es Offset Pagination?

Offset Pagination utiliza parámetros como page y limit para obtener una porción del conjunto de resultados. Es simple de implementar, pero lenta e inconsistente con grandes volúmenes de datos.

3. ¿Qué es Cursor Pagination?

Cursor Pagination utiliza un cursor opaco para cargar la siguiente página. Tiene mejor rendimiento y es más estable que Offset Pagination, pero es menos flexible para saltar a páginas arbitrarias.

4. ¿Qué es Keyset Pagination?

Keyset Pagination utiliza valores explícitos como createdAfter o lastId para cargar la siguiente página. Tiene un rendimiento excelente y es ideal para flujos de datos ordenados por tiempo.

5. ¿Qué es un limit por defecto?

Un limit por defecto es el valor estándar para la cantidad de elementos por página cuando el cliente no especifica uno. Los valores típicos son 20 o 50.

6. ¿Qué son los enlaces HATEOAS en paginación?

Los enlaces HATEOAS en paginación muestran URLs para la siguiente, anterior, primera y última página. Permiten que los clientes naveguen sin construir URLs manualmente.

7. ¿Qué es un parámetro de filtro?

Un parámetro de filtro es un parámetro de query que restringe el conjunto de resultados según un criterio, como ?status=active o ?category=books.

8. ¿Qué es un parámetro de ordenamiento?

Un parámetro de ordenamiento controla el orden de los resultados, como ?sort=name o ?sort=-createdAt para orden descendente. Las convenciones claras son importantes.

9. ¿Qué es un parámetro de búsqueda?

Un parámetro de búsqueda como q o search permite búsquedas de texto completo a través de la API. Las búsquedas complejas se implementan frecuentemente mediante APIs de búsqueda dedicadas con Elasticsearch u OpenSearch.

10. ¿Por qué la paginación es importante para el rendimiento?

La paginación reduce el volumen de datos por solicitud, disminuye la latencia y el consumo de memoria, y protege la base de datos y la red. Sin paginación, las consultas grandes pueden sobrecargar el servidor y los clientes.

11. ¿Qué es un limit máximo?

Un limit máximo es el límite superior de la cantidad de elementos por página. Previene que los clientes hagan solicitudes demasiado grandes y sobrecarguen la API.

12. ¿Qué es la inconsistencia en paginación?

La inconsistencia ocurre cuando el volumen de datos cambia entre cambios de página. Los registros pueden duplicarse o perderse. Cursor Pagination es menos propensa a esto que Offset Pagination.

13. ¿Qué es el Total Count en respuestas paginadas?

El Total Count es la cantidad total de registros que coinciden con los criterios de filtro. Ayuda a los clientes a entender la cantidad total de páginas y el alcance de los resultados.

14. ¿Cómo se documentan filtros y ordenamiento?

Los filtros y el ordenamiento deben describirse claramente en OpenAPI o en la documentación de la API. Esto incluye parámetros permitidos, tipos de datos, valores por defecto, valores permitidos y ejemplos.

15. ¿Cuáles son las mejores prácticas para paginación, filtros y ordenamiento?

Las mejores prácticas incluyen elegir el tipo de paginación apropiado, establecer limits por defecto y máximos razonables, usar parámetros descriptivos, criterios de ordenamiento estables, enlaces de navegación útiles, documentación clara y validación cuidadosa de todos los parámetros.

Fuentes

  1. https://www.rfc-editor.org/rfc/rfc8288
  2. https://www.martinfowler.com/articles/patterns-of-distributed-systems/pagination.html
  3. https://use-the-index-luke.com/no-offset

Lecturas recomendadas sobre API Design

Si quieres profundizar en API Design, consultas de datos y arquitectura de software, te sugerimos estos libros:

Keine Bücher für Kategorie "api-development" gefunden.

Volver al blog
Share:

Entradas relacionadas