Tuberías con nombre por internet
Haz POST a una ruta. Haz GET en la misma ruta. Los datos fluyen directamente del emisor al receptor: sin buffering, sin subidas, sin almacenamiento. Solo HTTP.
Terminal A — Emisor
$ curl -T report.pdf \
…/pipe/my-report
[INFO] Esperando receptor...
[INFO] Transmitiendo a 1 receptor(es)...
[INFO] Transferencia completa.
Terminal B — Receptor
$ curl \
…/pipe/my-report
-o report.pdf
% Total report.pdf
100 2.4M 100 2.4M 0 0 1.8M
Los datos fluyen a través, no hacia adentro
Cada byte que envías llega a los receptores en tiempo real. El servidor es un cable, no un almacén.
EMISOR
emisor
SERVIDOR PIPE
cero almacenamiento · hasta 256 receptores
RECEPTOR
receptor
El emisor abre
El emisor hace POST o PUT a cualquier ruta. El servidor espera, hasta 5 minutos, que un receptor se conecte.
Los bytes fluyen
Los datos se transmiten byte a byte por el canal. Cero buffering. Sin archivos temporales. Sin paso de subida.
Los receptores se conectan
Los receptores hacen GET a la misma ruta y obtienen el stream en vivo. Hasta 256 receptores pueden recibir el fanout de un solo emisor.
Composiciones comunes de Pipe
La mayoría de las recetas son dos comandos curl: uno para enviar, uno para recibir.
Qué puede fluir por una Pipe
Cualquier Content-Type que no sea ejecutable como script fluye literalmente. Los tipos MIME peligrosos se reescriben a text/plain: los datos no se pierden, se previene XSS.
application/octet-streamPUT → GETArchivos binarios, comprimidos, imágenes
/api/v1/pipe/[path]text/plainPOST → GETLogs, stdin, config, streams stdout
/api/v1/pipe/[path]multipart/form-dataPOST → GETSubida de archivo desde navegador (solo primera parte)
/api/v1/pipe/[path]video/webm, video/mp4PUT → navegadorCompartir pantalla, vídeo grabado
/api/v1/pipe/[path]?videotext/event-stream (SSE)GET espectadorMonitorización de progreso, velocidad/ETA/estado
/api/v1/pipe/[path]?progresstext/html (reescrito)PUT → GETSe reescribe a text/plain antes de enviar: XSS prevenido, datos no perdidos
/api/v1/pipe/[path]Cabeceras personalizadasPUT → GETMetadatos X-Hoody-Pipe, X-Piping reenviados
/api/v1/pipe/[path]Todos los endpoints viven en /api/v1/pipe/[path]. La dirección describe quién escribe y quién lee.
Construido para el volumen
Límites estrictos aplicados por servidor. HTTP 429 cuando la capacidad está llena, HTTP 414 cuando las rutas son demasiado largas.
256
Máx. receptores en una sola ruta
1.000
Conexiones pendientes sin establecer
1.000
Streams en vuelo simultáneos
5 min
TTL antes del desalojo HTTP 408
1.024
Longitud máxima de ruta en caracteres
50
Espectadores de progreso por ruta
9 endpoints, dos comandos que importan
POST o PUT para enviar. GET para recibir. El resto es observabilidad.
Observabilidad e interfaz
{count, plural, =1 {# endpoint} other {# endpoints}'}GET /health → { status, activePipes }
Transferencia de datos
{count, plural, =1 {# endpoint} other {# endpoints}'}POST o PUT para enviar · GET para recibir
A dos comandos curl de distancia
Sin SDKs. Sin configuración de auth. Sin límites de tamaño de archivo. Crea un contenedor Pipe y empieza a transferir.