Saltar al contenido
Empezar gratis
Volver al blog

Consejos sobre la API REST para una recopilación de datos fiable

Robert SfichiÚltima actualización el 18 min read
Consejos sobre la API REST para una recopilación de datos fiable
En resumen: una API de recopilación útil ofrece a los clientes una forma clara de solicitar datos, continuar un recorrido, recuperarse de un fallo y saber qué se ha recopilado. Estos consejos sobre la API REST vinculan cada contrato del lado del servidor con el comportamiento que debe implementar un consumidor fiable.

Un recopilador recupera tres páginas, agota el tiempo de espera en la cuarta y se reinicia a la mañana siguiente. Que omita registros, duplique el trabajo o reanude la operación de forma segura depende de decisiones tomadas mucho antes de que se agotara ese tiempo de espera. Los consejos sobre las API REST resultan más útiles cuando abordan esas decisiones como contratos concretos entre el productor y el consumidor.

Esta guía se centra en las API que exponen datos para su recopilación periódica, sincronización o análisis. El objetivo no es zanjar todas las discusiones arquitectónicas sobre REST, sino hacer que la interfaz sea predecible cuando cambian los conjuntos de datos, caducan las credenciales, fallan las solicitudes y los clientes se actualizan en momentos diferentes.

Para cada elección de diseño, hay que considerar qué debe conservar el cliente y qué puede deducir de forma segura. Un campo denominado next no es suficiente si el cursor caduca sin que se indique en la documentación. Un mensaje de error no es suficiente si los clientes no pueden distinguir entre una sobrecarga temporal y una entrada no válida. Una respuesta satisfactoria no es suficiente si cambia silenciosamente el significado de un campo de precio.

Las siete secciones siguientes abordan los contratos de recursos, la paginación, la gestión de errores, las solicitudes condicionales, el control de acceso, la evolución del esquema y la prueba operativa. También proporcionan una lista de verificación para los desarrolladores que utilizan una API que no han diseñado: identifica lo que garantiza la interfaz y, a continuación, haz visible en el plan de recopilación cada garantía que falte.

1. Basar los consejos sobre la API REST en un contrato de recursos

Describe un registro antes de diseñar una gran familia de puntos finales. Para un artículo del catálogo, define su identificador estable, el significado de su precio, su moneda, los campos opcionales y la marca de tiempo de actualización. Explica si un campo omitido difiere de un campo cuyo valor es nulo. Estas decisiones determinan cómo los consumidores almacenan y comparan las observaciones.

Asigna a los filtros significados igualmente precisos. Si updated_after se admita, especifica el formato de la marca de tiempo, la zona horaria y si el límite es inclusivo. Explica si el filtro se aplica a cambios empresariales, a cualquier actualización de la base de datos o a la hora de publicación. Un cliente no puede crear un recopilador incremental correcto cuando varios eventos diferentes comparten una etiqueta ambigua de «actualizado».

Utiliza los métodos HTTP de forma coherente con su semántica. Un punto final de recuperación no debería generar una exportación facturable simplemente por recibir una solicitud GET. Si el inicio de un trabajo cambia el estado de la aplicación, asigna a esa operación un contrato explícito y documenta cómo recuperar su resultado. La distinción entre métodos seguros y métodos idempotentes se define en la semántica HTTP.

Estos consejos sobre la API REST también se aplican a las opciones de representación. Una respuesta de recopilación puede utilizar una envoltura con registros y metadatos de paginación, pero dicha envoltura debe contar con un esquema documentado. Evita obligar a los usuarios a inspeccionar mensajes legibles para personas con el fin de descubrir si los datos están completos. Si una respuesta es parcial, indica ese hecho en un campo legible por máquina con un significado definido.

Detalles del contrato

El productor debe definir

El consumidor debe conservar

Identidad

ID estable y política de reutilización

ID de origen independiente de la posición de la fila

Hora

Zona horaria y significado de la actualización

Marca de tiempo original más resultado del análisis

Moneda

Moneda y unidad

Importe y moneda con precisión decimal

Datos que faltan

Semántica de «omitido» frente a «nulo»

Distinción exigida por el esquema

Completado

Resultado completo frente a resultado parcial

Estado de la ejecución y ventana de recopilación

Cuando un cliente implemente esta interfaz, debe conservar las respuestas sin procesar de forma selectiva con fines de diagnóstico y almacenar los registros normalizados por separado. No convierta automáticamente todos los campos desconocidos en columnas de producción. Acuerde qué promete el conjunto de datos posterior y, a continuación, asigne el contrato de origen a este de forma explícita.

2. Diseña una paginación que pueda sobrevivir a un reinicio

Una referencia útil a la página siguiente representa la continuación según reglas documentadas. Indica si la API utiliza números de página, desplazamientos, cursores o enlaces generados por el servidor. Explica qué filtros y qué orden de clasificación deben permanecer inalterados durante el recorrido. Si los cursores caducan, publica su vida útil o las condiciones bajo las cuales dejan de ser válidos.

Los consejos sobre paginación en las API REST suelen limitarse a la elección del tamaño de página. La cuestión más compleja es cómo pueden cambiar los datos subyacentes entre una solicitud y otra. Un desplazamiento puede variar cuando se inserta un elemento antes de la posición actual. Un cursor puede reducir algunos problemas de recorrido, pero no proporciona automáticamente una instantánea inmutable. Indica la garantía de consistencia por separado del mecanismo de paginación.

Es preferible proporcionar a los usuarios la referencia de continuación que deben seguir, en lugar de exigirles que inventen una. La paginación REST documentada por GitHub utiliza enlaces en la respuesta para indicar páginas relacionadas; su guía de paginación es un ejemplo concreto de un cliente que sigue el contrato de navegación del servidor. Otras API utilizan un token en el cuerpo de la respuesta, por lo que los usuarios deben consultar la documentación específica.

Documenta una condición de finalización definitiva. La ausencia de un cursor siguiente puede significar la finalización, mientras que una página corta puede indicarlo o no. Evita exigir a los clientes que deduzcan el final a partir del recuento de registros, a menos que ese comportamiento forme parte del contrato. Incluye un ejemplo de resultado vacío, ya que cero registros es un resultado empresarial normal, no necesariamente un fallo.

El consumidor solo debe persistir un punto de control después de que la página correspondiente haya sido aceptada y almacenada. Si el almacenamiento del punto de control y el de los registros están separados, garantiza la seguridad de la reproducción mediante la deduplicación o la coordinación transaccional. Guardar el cursor siguiente antes de guardar los registros actuales crea una brecha tras un fallo del sistema.

Establece límites de protección en las páginas, el tiempo y los valores de continuación repetidos. Si un servidor devuelve el mismo cursor dos veces, el cliente debe detenerse con un error de paginación clasificado, en lugar de entrar en un bucle indefinido. Una detención de protección debe seguir siendo distinguible de una finalización normal.

Para colecciones que cambian con frecuencia, documenta una estrategia de conciliación. Un cliente podría combinar la recopilación incremental con una comparación completa periódica, siempre que ambas se mantengan dentro del uso previsto de la API. Las eliminaciones también requieren un acuerdo: la desaparición de un registro de una página es una prueba débil de eliminación si el recorrido fue incompleto.

3. Establecer una política común para los errores y los reintentos

Separa las categorías de errores que requieran acciones diferentes. Un filtro no válido requiere una solicitud corregida. Una credencial caducada requiere el flujo de autenticación documentado. Una sobrecarga temporal puede justificar la espera. La respuesta del servidor debe exponer un código de error estable, un estado HTTP adecuado y un identificador de solicitud que ayude a los equipos de soporte a rastrear el fallo sin incluir información confidencial.

Los mejores consejos sobre las API REST limitan la recuperación. Los productores deben describir qué respuestas se pueden reintentar y cómo se aplican los límites de frecuencia. Los consumidores deben utilizar un número máximo de intentos, un tiempo total asignado y una política de retrasos, en lugar de reintentar cada excepción indefinidamente. Los fallos repetidos deben dar lugar a una tarea incompleta visible con un diagnóstico útil.

Cuando se facilite, se debe interpretar Retry-After según su formato definido: puede ser un retraso en segundos o una fecha HTTP. La referencia de MDN sobre «Retry-After» documenta ambas formas. Un cliente cuyo presupuesto de trabajo restante no pueda acomodar el retraso solicitado debería aplazar o finalizar el trabajo explícitamente, en lugar de volver a intentarlo antes de tiempo.

Utiliza jitter con backoff cuando una política de reintentos permita nuevos intentos, para que los trabajadores no se activen todos al mismo tiempo. Coordina los límites de tasa entre los trabajadores que comparten la misma cuenta o token. Limitar cada proceso de forma independiente puede seguir sobrecargando una cuota a nivel de cuenta cuando se ejecutan muchos procesos a la vez.

Hay que tener más cuidado con las operaciones que crean exportaciones, suscripciones u otro tipo de estado. Un tiempo de espera agotado no demuestra que el servidor no haya hecho nada; puede significar que la respuesta se perdió después de que la operación se completara. Si la API admite claves de idempotencia, hay que documentar su ámbito, retención y comportamiento cuando la misma clave acompañe a una carga útil diferente. Los usuarios deben reutilizar la clave para la misma operación lógica de acuerdo con ese contrato.

Las prácticas recomendadas de la API REST de GitHub ilustran por qué es importante la orientación del proveedor: incluyen consejos específicos sobre solicitudes secuenciales, errores de limitación de frecuencia y solicitudes condicionales. No des por sentado que otro proveedor tenga cuotas o un comportamiento de reintentos idénticos.

Para la implementación del cliente, elige una biblioteca HTTP con controles explícitos de tiempo de espera y gestión de conexiones. Nuestra guía del cliente HTTP en Python proporciona contexto para esa capa. Mantén la clasificación de las respuestas fuera del contenedor de transporte genérico para que el significado específico de cada punto final siga siendo visible y comprobable.

4. Proporciona a los clientes validadores y una estrategia de actualización

Un recopilador recurrente no debería tener que descargar una representación de gran tamaño únicamente para descubrir que no ha cambiado nada. Cuando sea apropiado, exponga validadores como los ETag y documente el comportamiento de las solicitudes condicionales. El cliente puede conservar el validador y enviar la condición pertinente en una solicitud posterior.

Los consejos sobre el almacenamiento en caché de las API REST deben distinguir entre los bytes transferidos y la corrección de los datos. Un ETag identifica una representación según el contrato del servidor; no es necesariamente una marca de tiempo ni un hash de contenido que el cliente deba descodificar. Trata el valor como opaco. Almacénalo junto con la identidad de la solicitud y la representación almacenada en caché que valida.

Para una solicitud GET condicional que reciba una respuesta «no modificada», utilice la representación almacenada existente. No introduzca un cuerpo de respuesta vacío en el analizador JSON habitual ni sustituya la colección almacenada en caché por un array vacío. Un consumidor que no disponga del cuerpo almacenado en caché correspondiente no podrá utilizar esa respuesta como si contuviera un conjunto de datos actualizado.

Incluye el contexto relevante de la solicitud en la clave de caché: punto final, parámetros de consulta, representación seleccionada y cualquier partición de identidad que requiera la API. Una respuesta almacenada en caché para una cuenta no debe servirse a otra cuenta simplemente porque la URL coincida. Documenta cómo la autorización y la personalización afectan al almacenamiento en caché.

Diseña los filtros y validadores incrementales como herramientas independientes. Un validador de colección puede indicar que la representación solicitada no ha cambiado; un filtro de actualización solicita registros que cumplan una condición temporal. Ninguno de los dos explica automáticamente las eliminaciones, las marcas de tiempo retroactivas o las páginas reordenadas. Especifica qué problema resuelve cada mecanismo.

Estos consejos sobre la API REST deberían dar lugar a un plan de actualización explícito. Por ejemplo, un consumidor puede validar las representaciones de recursos a las que se accede con frecuencia, consultar un canal de actualizaciones en busca de nuevas observaciones y conciliar el conjunto de datos completo según un calendario aprobado. El calendario exacto es una decisión empresarial y de capacidad, no una garantía HTTP.

Prueba la ruta de «sin cambios» con el mismo cuidado que la ruta de respuesta completa. Es fácil que un recopilador funcione en su primera ejecución y falle solo cuando los validadores empiecen a suprimir los cuerpos de las respuestas. Prueba también la pérdida de caché para que la recuperación no dependa de datos que ya no existen localmente.

5. Mantén la autenticación limitada y observable

Otorga a las integraciones el acceso mínimo necesario para su tarea de recopilación. Un cliente de catálogo de solo lectura no debería requerir permisos administrativos de escritura. Documenta el esquema de autenticación, los ámbitos requeridos, la vigencia del token y el procedimiento de renovación admitido. Haz que los fallos de autorización sean lo suficientemente distinguibles como para que un cliente se detenga o solicite la intervención adecuada.

Las credenciales de portador deben protegerse, ya que su posesión permite su uso. La especificación del token de portador de OAuth describe la transmisión a través del encabezado «Authorization» y los requisitos de seguridad relacionados con los tokens de portador. Utiliza el punto final HTTPS documentado por el proveedor y no incluyas secretos en cadenas de consulta normales ni en la salida de diagnóstico.

Los consejos sobre la API REST para las credenciales son también consejos de implementación. Proporcione los secretos a través del mecanismo de gestión de secretos de la aplicación, oculte los encabezados en los registros y separe las credenciales de desarrollo de las de producción. Registre un identificador de credencial no secreto si los operadores necesitan identificar qué integración ha fallado. El token en sí mismo no es una prueba útil en un informe de incidente.

Valida los destinos de continuación antes de adjuntar credenciales. Si la API devuelve una URL de página siguiente, el consumidor debe asegurarse de que pertenezca al origen o a los orígenes permitidos documentados. El comportamiento de redireccionamiento también merece un tratamiento explícito. Un bucle genérico de seguimiento de URL no debe reenviar un encabezado de autorización a un host arbitrario.

En las API que diseñes, mantén el estado de autenticación separado del estado de recopilación. La renovación de una credencial no debería obligar a los clientes a abandonar sus datos almacenados innecesariamente, pero la documentación debe explicar si un cursor está vinculado a una cuenta, a un token o a un conjunto de permisos. Un cambio de ámbito puede alterar los registros visibles incluso si el cursor sigue funcionando.

Cuando un flujo de trabajo utilice además una sesión de navegador autorizada, hay que comprender en qué se diferencian las cookies HTTP de los encabezados de tokens de API. No se debe dar por sentado que copiar una sesión de navegador crea una integración con la API compatible. Utiliza el mecanismo de acceso previsto para la interfaz y mantén la propiedad explícita entre los trabajadores.

6. Desarrolla el esquema sin corromper las colecciones

Publica ejemplos de registros normales, valores opcionales ausentes, colecciones vacías y errores. A continuación, haz que el esquema formal se ajuste a esos ejemplos. Una declaración de tipo que indique que un campo es siempre numérico resulta engañosa si el servicio emite ocasionalmente una cadena vacía para valores desconocidos.

El esquema JSON puede describir propiedades, campos obligatorios y el tratamiento de propiedades adicionales, tal y como se documenta en su referencia de objetos. Decide en qué casos los usuarios deben ser tolerantes y en cuáles deben dar error. Aceptar un nuevo campo opcional puede ser razonable; aceptar una cadena de caracteres cuando se requiere un importe monetario puede ocultar un cambio que rompa la compatibilidad.

Los consejos sobre el control de versiones de las API REST deben abarcar tanto el significado como la forma. Cambiar un precio de unidades menores a unidades mayores puede conservar el tipo numérico JSON, pero a la vez romper todos los cálculos. Renombrar un valor de estado o cambiar la interpretación de la zona horaria también puede suponer una incompatibilidad, incluso cuando un analizador genérico acepte la respuesta.

Para los productores, mantened una política de compatibilidad y comunicad los periodos de obsolescencia a través de los canales que vuestros clientes utilicen realmente. Para los consumidores, fijad la versión de la API compatible cuando el proveedor ofrezca selección de versiones y mantened ejemplos de pruebas para esa versión. No descubráis una migración solo después de que un panel de control muestre valores imposibles.

Ponga en cuarentena los registros no válidos con un motivo clasificado y pruebas de diagnóstico bien delimitadas. Decida si un registro mal formado provoca el fallo de la página, el fallo de la ejecución o permite una publicación parcial. Esa política depende del uso posterior, pero debe ser explícita. Descartar en silencio las filas no válidas hace que la salida parezca más completa de lo que es.

Almacena la versión de extracción o transformación junto con los datos aceptados. Cuando se corrige un error del analizador, la versión ayuda a identificar qué registros pueden necesitar un nuevo procesamiento. Si las respuestas sin procesar conservadas están aprobadas y son suficientes, vuelve a procesarlas antes de generar solicitudes repetidas innecesarias.

Estos consejos sobre la API REST establecen una división útil: el productor es responsable del contrato publicado, mientras que el consumidor se encarga de la validación con respecto al contrato y del significado de su conjunto de datos derivado. Ninguna de las partes debe confiar en que la otra detecte todas las inconsistencias.

7. Prueba la recuperación como parte de la experiencia de la API

Una solicitud en condiciones ideales dice muy poco sobre un recopilador que se ejecuta cada hora. Crea casos de prueba o un servicio de prueba para una página vacía, un cursor repetido, un cursor caducado, un límite de frecuencia, un JSON mal formado, un tipo de campo inesperado y una interrupción tras el almacenamiento pero antes de la creación de un punto de control. Especifica el resultado esperado de cada caso antes de implementar la recuperación.

Para los productores, estos escenarios son tanto pruebas de documentación como pruebas de software. Si el equipo no puede indicar qué debe hacer un cliente cuando un cursor caduca a mitad de una ejecución, el contrato está incompleto. Resuelve la ambigüedad y coloca la respuesta junto a la documentación del punto final, donde los desarrolladores de integración puedan encontrarla.

Para los consumidores, realiza un seguimiento de los resultados útiles: registros aceptados, registros rechazados, páginas completadas, reintentos, antigüedad de los puntos de control y estado final de finalización. Registra los ID de solicitud y los nombres de los puntos finales sin registrar secretos ni datos personales innecesarios. Un porcentaje de éxito agregado no debe ocultar que cada colección de gran tamaño se detiene en su última página.

Los consejos sobre las API REST resultan prácticos cuando la observabilidad responde a una pregunta de negocio. ¿Puede un analista confiar en que esta categoría se ha recopilado en su totalidad? ¿Se están reutilizando los datos de ayer porque no ha cambiado nada o porque ha fallado la ejecución de hoy? ¿Debería continuar un trabajo posterior cuando se ha puesto en cuarentena una pequeña fracción de registros? Define esas decisiones antes de automatizar la publicación.

Mantén los ejemplos reproducibles. Utiliza un entorno de pruebas o un dispositivo local para las pruebas de fallo, en lugar de sobrecargar intencionadamente una API en producción para descubrir sus límites. Una respuesta de prueba documentada es suficiente para verificar el análisis y la clasificación de reintentos; los experimentos de capacidad requieren una planificación y autorización independientes.

Revisa la integración tras cambios en el esquema, la autenticación y la paginación, no solo tras fallos de transporte. Una recopilación fiable es una relación entre una API en evolución y un cliente en evolución. Un pequeño conjunto de pruebas de contrato hace visible esa relación antes de que los registros erróneos lleguen a los usuarios.

Puntos clave

  • Define la identidad de los recursos, el significado de los campos y la integridad de la recopilación antes de seleccionar los detalles de los puntos finales. Los consumidores necesitan una semántica que puedan mantener en todas las ejecuciones.
  • Documenta la continuación, la caducidad y la coherencia por separado. Guarda puntos de control una vez que los datos sean duraderos y garantiza que la reproducción sea segura.
  • Establece reglas de reintento delimitadas y específicas para cada proveedor. Trata los resultados ambiguos de las escrituras de forma diferente a las lecturas fallidas.
  • Combina los validadores con representaciones almacenadas en caché, particiona correctamente las credenciales y las cachés, y prueba los cambios en el esquema antes de publicar datos derivados.

Preguntas frecuentes

¿Debe una exportación masiva tener la misma interfaz que una recopilación en tiempo real?

Puede compartir las mismas definiciones de recursos, pero es posible que necesite un contrato de trabajo independiente. Una exportación de larga duración se beneficia de un recurso de estado, un periodo de retención documentado y una descripción clara del intervalo de tiempo o la instantánea que representa. Mantén esos detalles del ciclo de vida de forma explícita en lugar de hacer que un cliente mantenga una solicitud abierta de forma indefinida.

¿Puede un webhook sustituir a la reconciliación programada?

Un webhook puede reducir el sondeo, pero sus garantías de entrega y reproducción determinan qué recopilación adicional se necesita. Documenta si los eventos pueden duplicarse, retrasarse o reenviarse, y cómo los consumidores pueden recuperar un intervalo perdido. Trata los eventos como otro contrato de entrada y utiliza la reconciliación cuando la garantía de integridad requerida supere el comportamiento documentado del flujo de eventos.

¿Debe la documentación incluir todos los lenguajes de programación compatibles?

Proporcione suficientes ejemplos para el público al que va dirigida la integración y mantenga la coherencia en su comportamiento. La autenticación, la codificación de URL, la clasificación de respuestas y la paginación deben significar lo mismo en todos los ejemplos. Un conjunto reducido de ejemplos actualizados resulta más útil que uno extenso en el que los fragmentos de código no se ajustan al contrato del punto final u omiten comportamientos importantes en caso de fallo.

Convierte el contrato en una integración fiable

Aplica estos consejos sobre API REST a un flujo de trabajo de la colección antes de ampliar la interfaz. Elige un recurso representativo, define su identidad y el significado de sus campos, y simula un reinicio a mitad de la paginación. A continuación, repite el ejercicio con un token caducado, una respuesta «no modificada» y un registro que incumpla el esquema.

Esos escenarios ponen de manifiesto decisiones que un catálogo de puntos finales puede pasar por alto. También proporcionan a productores y consumidores un lenguaje común para revisar los cambios: qué significa la respuesta, qué debe conservar el cliente y qué resultado se considera completo. Mantén ese acuerdo cerca de los fixtures ejecutables y de la documentación publicada para que perdure a pesar de los cambios en el equipo.

Cuando los datos de origen necesarios solo estén disponibles en páginas web autorizadas en lugar de a través de una API adecuada, evalúa la API Scraper de WebScrapingAPI como fuente de datos. Aplica la misma disciplina al proceso resultante: registros explícitos, recuperación limitada, validación y un estado de finalización veraz.

Acerca del autor

Robert Sfichi, Desarrollador full-stack @ WebScrapingAPI

Robert Sfichi

Desarrollador full-stack

Robert Sfichi forma parte del equipo de WebScrapingAPI, donde contribuye al desarrollo del producto y ayuda a crear soluciones fiables que dan soporte a la plataforma y a sus usuarios.

Empieza a crear

¿Estás listo para ampliar tu recopilación de datos?

Únete a más de 2000 empresas que utilizan WebScrapingAPI para extraer datos de la web a escala empresarial sin ningún gasto de infraestructura.