2012-07-30 22 views
11

He escrito mi propia API Restful y me pregunto cuál es la mejor manera de manejar grandes cantidades de registros devueltos por la API.Restful API - manejo de grandes cantidades de datos

Por ejemplo, si uso el método GET en myapi.co.uk/messages/, esto traerá de vuelta el XML para todos los registros de mensajes, que en algunos casos podrían ser 1000. Esto hace que el uso de API sea muy lento.

¿Alguien puede sugerir la mejor manera de lidiar con esto? ¿Es estándar devolver los resultados en lotes y especificar el tamaño del lote en la solicitud?

Respuesta

12

Puede cambiar su API para incluir parámetros adicionales para limitar el alcance de los datos devueltos por su aplicación.

Por ejemplo, puede agregar los parámetros limit y offset para obtener solo una pequeña parte. Así es como se puede hacer la paginación de acuerdo con REST. Una solicitud como esta daría como resultado la obtención de 10 recursos de la colección de mensajes, del 21 al 30. De esta manera usted puede pedir una parte específica de un gran conjunto de datos:

myapi.co.uk/messages?limit=10&offset=20 

Otra forma de disminuir la carga útil sería la única pedir ciertas partes de la representación de sus recursos. Así es como lo hace facebook:

/joe.smith/friends?fields=id,name,picture 

Recuerde que al usar cualquiera de estos métodos, usted tiene que proporcionar una manera para que el cliente para descubrir cada uno de los recursos. No puede suponer que solo mirarán los parámetros y comenzarán a cambiarlos en busca de datos. Eso sería una violación del paradigma REST. Bríndeles los hipervínculos necesarios para evitarlo.

Recomiendo ver this presentation on RESTful API design por apigee (el screencast se llama "Teach a Dog to REST"). Aquí se discuten las buenas prácticas y las ideas claras para abordar los problemas cotidianos.

EDIT: El vídeo se ha actualizado varias veces desde que he publicado esta respuesta, se puede extraer la 3rd edition from January 2013

+0

que es muy útil, gracias. – LeeTee

+0

la presentación vinculada es genial: estricta e informativa – kiedysktos

+0

@toniedzwiedz Supongamos que cuando el servidor tiene 20 recursos, el cliente obtuvo los primeros 10 recursos utilizando el límite 10 y el desplazamiento 0 y antes de enviar otra solicitud para recuperar los recursos restantes si se eliminan algunos (1 a 5) del servidor, ¿cómo obtiene el cliente los recursos 11º a 15º en este enfoque? porque en el próximo fetch, el cliente solicitará el desplazamiento 10, por lo que pasaría por alto el 11º al 15º derecho de datos. ¿Hay otro enfoque mejor para resolver esto sin que el cliente realice un seguimiento de los recursos eliminados? – thavasidurai

Cuestiones relacionadas