Cómo ApiCatcher captura archivos grandes a través de HTTP
He probado muchas herramientas de captura HTTPS para iOS y ninguna permite capturar archivos de recursos estáticos — o mejor dicho, simplemente descartan las solicitudes cuando el cuerpo supera cierto tamaño. Ha habido ocasiones en las que necesitaba investigar un problema de permisos en una subida de archivos y quería capturar la URL completa para identificar el dominio y el proyecto implicado, y ni siquiera eso era posible.
Mientras desarrollábamos ApiCatcher, descubrimos que iOS impone un límite de memoria a los procesos de extensión de red. Según diversas fuentes, el sistema restringe estos procesos a un máximo de unos 50 MB de memoria; si se supera este límite, el sistema mata el proceso. Sin embargo, el umbral real puede variar según la versión del sistema operativo: en nuestras pruebas, el proceso seguía funcionando correctamente con unos 80 MB.
Debido a esta limitación, la mayoría de las herramientas de captura implementan su propia estrategia de descarte, rechazando las solicitudes cuyo cuerpo excede cierto tamaño.
¿Cómo resuelve ApiCatcher este problema?
La clave está en que los archivos estáticos rara vez necesitan reescritura del cuerpo ni modificación mediante scripts. No hay necesidad de almacenar su contenido en memoria. En su lugar, ApiCatcher los escribe directamente en disco: los bytes leídos del búfer de recepción se escriben inmediatamente en un archivo, sin almacenamiento temporal en RAM.
Un detalle importante: las cargas HTTP grandes se fragmentan a nivel TCP. Una transferencia de 1 MB puede dividirse en segmentos TCP de unos 64 KB. Al escribir cada segmento en disco según llega, solo se consumen 64 KB de memoria en cada momento, no el archivo completo. Una vez completada la solicitud o respuesta, se almacena la ruta del archivo en la base de datos en lugar del contenido original.
El compromiso es que al eliminar registros, debemos localizar y borrar los archivos de cuerpo correspondientes, lo que requiere gestionar la coherencia de datos por nuestra cuenta. Por eso la eliminación en ApiCatcher es algo más lenta: los registros se eliminan uno por uno. Pero creemos que este compromiso vale la pena: la eliminación no es una operación frecuente, e incluso 10.000 registros se pueden limpiar en unos 5 segundos.
Más allá de la captura, ApiCatcher renderiza imágenes, videos y audio directamente en la aplicación, con reproducción con un solo toque. También hemos creado páginas dedicadas de vista previa y exportación por lotes para facilitar la extracción de material de prueba.
Aplicamos el mismo enfoque de escritura directa en disco en iOS, Windows y macOS — aunque las plataformas de escritorio no tienen las mismas restricciones de memoria, este diseño ofrece mejor rendimiento en todas ellas.
Captura de ApiCatcher for iOS:

Captura de ApiCatcher for macOS:
