Arquitectura¶
WSBuilder se organiza alrededor de una idea simple: una aplicacion central que enruta requests y va activando componentes transversales cuando hacen falta.
Flujo de request¶
HTTPServerrecibe la conexion.parse_http_requestcrea unRequest.App.dispatchaplica seguridad, cache y resolucion de ruta.- El handler devuelve
Response,dict,list, texto oNone. Appajusta CORS, cookies de afinidad, metricas y logs.
Tipos de ruta¶
view¶
Rutas HTML o texto. Pueden usar un pool de workers por ruta si configuras min_threads y max_threads.
@app.view("/dashboard", min_threads=1, max_threads=4, requests_per_thread=32)
def dashboard(_request):
return "ok"
api¶
Rutas JSON para APIs y servicios de control.
@app.api("/api/users")
def users(_request):
return [{"id": 1, "name": "Alice"}]
ws¶
Rutas WebSocket con handshake y callbacks de ciclo de vida.
@app.ws("/ws/")
def chat(ws, _request):
while True:
frame = ws.recv_frame()
if frame.opcode == 0x8:
break
ws.send_text(frame.payload.decode("utf-8", errors="ignore"))
Componentes transversales¶
Seguridad
Bloquea, limita y audita requests antes de entrar al handler.
Cache
Guarda respuestas de `view` y aplica reglas globales o por ruta.
Metricas
Expone snapshots JSON y streaming continuo para observabilidad en vivo.
Tareas
Ejecuta trabajo en background con cancelacion y control de concurrencia.
Threads por ruta¶
Las rutas view pueden correr en directo o en un pool controlado por la propia ruta.
thread_count=0usa ejecucion directa.min_threadsymax_threadshabilitan el pool.requests_per_threadlimita cuanta carga acepta cada worker.affinity_ttl_secondsythread_cookie_nameayudan a mantener afinidad por cookie.
Docs nativas¶
App.enable_docs() usa App.describe() para construir el JSON de la aplicacion y una pagina HTML simple.
Esto es util cuando quieres introspeccion interna sin montar una documentacion externa.
Cuando usar cada capa¶
| Necesidad | Capa |
|---|---|
| HTML o texto | view |
| JSON o API | api |
| Conexion persistente | ws |
| Tareas de fondo | tasks |
| Control de acceso | security |
| Telemetria | metrics |
| Respuesta repetida | cache |
Nota practica¶
La libreria intenta mantenerse en la stdlib. Eso simplifica despliegue, reduce friccion en entornos pequenos y hace mas obvio el flujo de ejecucion desde socket hasta respuesta.