2010-01-06 4 views
5

que están teniendo una búsqueda/lista de recursos:REST API de paginación: hacer que la página de tamaño un parámetro (configurable desde el exterior)

http://xxxx/users/?page=1

Internamente, el tamaño de página es estática y devuelve 20 artículos. El usuario puede avanzar aumentando el número de página. Pero para ser más flexible que ahora estamos pensando también para exponer el tamaño de una página:

http://xxxx/users/?page=1&size=20

Como tal, esto es flexible como el cliente ahora puede decidir network-llamadas vs tamaño de la respuesta, cuando se busca. Por supuesto, esto tiene el inconveniente de que el servidor podría ser un duro golpe, ya sea por accidente o maliciosly a propósito: http://xxxx/users/?page=1&size=1000000

Para robustez de la solución podría ser la de configurar un límite superior de tamaño de página (por ejemplo, 100) y cuando se excede o bien representan una respuesta de error o un redireccionamiento HTTP a la URL con el parámetro de tamaño de página más alto posible.

¿Qué opinas?

Respuesta

8

Personalmente, simplemente documentaría un tamaño de página máximo, y cualquier cosa más grande que eso simplemente se trata como el máximo.

3

Administrar el acceso a los recursos es siempre una buena idea al igual que proteger las interfaces externas: en otras palabras, poner un límite razonable.

El redireccionamiento puede ser una buena idea cuando se trata del tiempo de desarrollo, es decir, cuando el usuario de la API se familiariza con el servicio, pero fuera de esta situación, dudo que haya valor.

Asegúrese de que los parámetros estén bien documentados de cualquier manera.

1

¿Has probado esto para ver si es incluso una preocupación? Si un usuario solicita un tamaño de página de un millón, ¿eso realmente hace que todas sus otras solicitudes se detengan/desaceleren? Si es así, podría ver primero tu arquitectura subyacente. Pero si, al final, este es un problema, no creo que establecer un límite estricto en el tamaño de la página sea malo.

Pregunta: Cuando el usuario OBTIENE el URI http://xxx/user?page=1 ¿la respuesta tiene un enlace en la página siguiente? ¿pagina anterior? Si no, entonces no es realmente RESTful.

+0

estoy más preocupado de que se genere una carga útil innecesaria y se desperdicie ancho de banda. Asegúrese de que la aplicación no fallará, pero causará una carga innecesaria en el backend de búsqueda y en la creación de respuestas xml/json. en mi opinión, enviar tamaño = 1000000 es bastante extraño y es accidental o malicioso. seguro, se incluyen los enlaces de paginación :) –

+1

Entendido - pero para alguien que hace minería de datos u otras acciones que necesitan un gran conjunto de datos, puedo ver que está sucediendo. Honestamente lanzaría una mala solicitud (400), con un mensaje de error que indicaba el tamaño máximo de página. Al devolver cierta cantidad de artículos definidos por el servidor se verá al usuario como si pidieran 100000 pero obtuvieron 200, lo que probablemente pensará significa que solo hay 200 artículos para encontrar. – Gandalf

+0

Si devuelve los enlaces de búsqueda siguiente/anterior, debe quedar claro que hay más datos. – Nate

Cuestiones relacionadas