2009-02-01 17 views
13

Estoy diseñando una APLICACIÓN REST que necesita paginación (por x) se aplica desde el lado del servidor.Diseño RESTful: colecciones de paginación

¿Cuál sería la forma correcta de la página a través de cualquier colección de recursos:

Opción 1:

GET /resource/page/<pagenr> 
GET /resource/tags/<tag1>,<tag2>/page/<pagenr> 
GET /resource/search/<query>/page/<pagenr> 

Opción 2:

GET /resource/?page=<pagenr> 
GET /resource/tags/<tag1>,<tag2>?page=<pagenr> 
GET /resource/search/<query>?page=<pagenr> 

Si es 1, lo que debería hacer con GET/resource? Redirigir a/resource/page/0, responder con algún error o responder exactamente igual que/resource/page/0 sin redirigir?

+0

Personalmente iría con la página = . Pero creo que tiene más preguntas fundamentales para responder sobre su diseño a juzgar por las opciones anteriores. :) –

+0

¿Quieres decir porque tengo que usar paginación? –

+0

Tal vez eche un vistazo a http://stackoverflow.com/questions/924472/paging-in-a-rest-collection – zehrer

Respuesta

4

Con mi conocimiento limitado de lo que REST se trata, entonces el siguiente podría ser el "más" tranquilo.

GET /resource/?page=<pageenr>&asof=<datetime> 

Dado que el contenido de la representación nunca cambiará inesperadamente, y se puede usar el almacenamiento en caché.

Pero para responder realmente a su pregunta, creo que la página de parámetros es el método preferido.

+1

No solo eso, sino que la paginación no es parte del recurso. Si usa paginación o no, y de qué forma, no cambia el recurso, solo la forma en que solicita verlo. Lo mismo ocurre con el orden de clasificación e incluso el filtrado. –

+1

@Dave Van den Eynde: Eso está mal. RFC 3986 (sintaxis genérica URI) estados (sección 3.4): ** "El componente de consulta contiene datos no jerárquicos que ** * junto con los datos en el componente de ruta (sección 3.3), * ** sirve para identificar un recurso ** * dentro del alcance del esquema del URI y la autoridad de denominación (si corresponde) "* (mi resaltado). La página dos es un recurso diferente de la página 1. Pero en cualquier caso, es irrelevante para el RESTfulness. – mogsie

+0

Mediante ese RFC, la parte de "fragmento" del URI se debe usar para paginación/clasificación. Pero dudo mucho que este RFC se aplique aquí. ¿Has probado esto? No creo que los navegadores hagan una distinción entre dos URI donde solo difiere el fragmento. Tal vez debería haber redactado eso de manera diferente. Si en una API REST el 'recurso' es realmente lo que identifica la RUTA, entonces la consulta se puede utilizar para completar el recurso con paginación/clasificación. Pero qué 'recurso' es para REST, difiere de lo que es un recurso en el contexto de un URI. –

4

Iría con la opción (2). ¿Por qué?

  1. Más tarde puede agregar un parámetro de tamaño de página a la consulta para que el cliente pueda especificar el tamaño de página.
  2. En caso de que no se haya especificado ningún parámetro de página, puede devolver la primera página (la predeterminada). En muchos casos, es posible que el cliente solo necesite la primera página, por lo que simplifica el protocolo entre el cliente y el servidor.
13

Lo que parece el URI no es la parte más importante. En cambio, lo que debería pensar es cómo se presenta al usuario. Una página debe tener, por ejemplo, un enlace a la página "siguiente" y otro enlace a la página "anterior" (si hay una). Eche un vistazo a RFC 5005 Feed Paging and Archiving

+0

¿Por qué esta votación fue rechazada? ¡Es la respuesta correcta! – mogsie

+0

Buen enlace: no había visto ese RFC antes. – ladenedge

Cuestiones relacionadas