Las peticiones se hacen en el core
Por qué mover la red de la webview a Rust: qué se gana en control, en superficie y en capacidades, y qué se pierde. La decisión de arquitectura de la fase.
La comparación
Seis filas a favor del core y una en contra, y la que está en contra es coste de escritura, no de resultado. Es una de las decisiones más claras del temario.
Lo que solo se puede en el core
Tres cosas que en la webview no existen y que una aplicación de escritorio acaba necesitando:
- Descargar a un fichero sin pasar por memoria. Un instalador de doscientos megas, un modelo, un vídeo: en el core es un flujo del socket al disco; en la webview es doscientos megas en la memoria del proceso, y luego cruzarlos.
- Control real sobre certificados. Fijar el certificado de tu servicio, o aceptar uno de una entidad interna en un entorno de empresa.
- Y hablar con cosas que no son web. Un servidor propio por un canal local del nivel 46.2, un protocolo que no sea el del navegador, un socket.
El patrón
// el cliente vive en el estado del core, se crea una vezpub struct Api { cliente: reqwest::Client, base: Url,}#[tauri::command]async fn proyectos_recientes(api: State<'_, Api>) -> Result<Vec<Proyecto>, Error> { // el testigo lo pone la capa de red, leyéndolo del estado. No viene del frontend api.get("/proyectos?recientes=1").await}Tres detalles:
- Un solo cliente, reutilizado. Crear uno por petición desperdicia conexiones y sesiones de cifrado; reutilizarlo es más rápido y menos costoso.
- La URL la construye el core a partir de una base suya y de lo que el comando significa. El frontend nunca pasa una URL — nivel 48.2.
- Y el testigo lo pone la capa de red, sacándolo del estado del nivel 38.2. El comando ni lo ve.
Cuándo la webview sí vale
Para no absolutizar:
- Recursos que el motor va a mostrar: una imagen remota en una etiqueta. Que la cargue el motor es lo correcto — con la política permitiéndolo.
- Prototipos y aplicaciones sin autenticación. Si no hay testigo que proteger ni descargas grandes, la diferencia es menor.
- Y cosas que el motor hace mejor: si necesitas una conexión persistente con reconexión y el motor la trae hecha, usarla puede ser razonable — aunque el testigo sigue siendo un problema.
La regla: si hay credenciales de por medio, core. Si son bytes que el motor va a pintar, webview.