Navigation
Print Share Copy URL
Breadcrumb

Rust + Rocket: API REST Full-Stack para Gestión de Órdenes

Caso de estudio full-stack usando Rust con el framework Rocket como backend y Next.js como frontend, conectados a MariaDB con SQLx para la gestión del dataset Northwind.

[Maximiliano A. Paredes]

Rust Para Backend Web: ¿Vale la Pena?

Después de trabajar con Node.js y Python en la mayor parte del stack del Master, el módulo de Rust planteó una pregunta interesante: ¿qué tan viable es Rust para construir APIs web de producción?

La respuesta corta: completamente viable, con algunas fricciones de aprendizaje.

El Proyecto: Northwind Orders Management

El dataset Northwind es el “Hello World” de las bases de datos relacionales — órdenes, clientes, productos, empleados. Una API CRUD sobre él es el caso de prueba perfecto para evaluar un framework web.

Por qué Rocket

Rocket es el framework web de Rust más ergonómico para empezar. Su sistema de routing es declarativo y se integra bien con el toolchain de Rust:

#[get("/orders")]
async fn get_orders(db: &State<Pool<MySql>>) -> Json<Vec<Order>> {
    let orders = sqlx::query_as!(Order, "SELECT * FROM orders")
        .fetch_all(db.inner())
        .await
        .unwrap();
    Json(orders)
}

SQLx: Queries Validadas en Tiempo de Compilación

La killer feature de SQLx es que las queries SQL se validan contra el esquema real de la base de datos en tiempo de compilación. Si tu query tiene un error de sintaxis o referencias una columna que no existe, el build falla antes de que llegues a producción.

// Esta query falla en compile-time si 'order_date' no existe en la tabla
let order = sqlx::query_as!(
    Order,
    "SELECT order_id, customer_id, order_date FROM orders WHERE order_id = ?",
    id
)
.fetch_one(&pool)
.await?;

Stack Completo

Backend (Rust)

Crate Rol
rocket 0.5 Framework web asíncrono
sqlx 0.7 ORM con queries compile-time safe
serde Serialización/deserialización JSON
rust_decimal Valores monetarios sin pérdida de precisión
rocket_cors Middleware CORS

Frontend (Next.js)

  • Next.js 16 + React 19 + TypeScript
  • TailwindCSS v4 para estilos

Lo Más Dificil: El Ownership de Rust

El mayor obstáculo no fue Rocket ni SQLx, sino el propio sistema de ownership y borrowing de Rust.

Por ejemplo, pasar una conexión de base de datos entre handlers requiere entender bien Arc<Mutex<T>> o usar el sistema de State<T> de Rocket que abstrae eso. Al principio genera muchos errores del compilador, pero son errores que en otros lenguajes son bugs en producción.

Conclusión

Rust + Rocket es una combinación seria para APIs web. El costo de entrada (aprender el borrow checker) se paga con:

  • Performance nativa: Sin GC, sin overhead de VM
  • Seguridad en memoria: Toda una categoría de bugs simplemente no puede existir
  • Errores en compile-time: SQLx, tipos, ownership

Para backends de alto rendimiento o servicios críticos (incluyendo nodos blockchain), la inversión en aprender Rust vale.

Código fuente: github.com/87maxi/rocket