Primeros pasos para un desarrollador de NodeJS en la programación web con Rust
Puedes encontrar el segundo artículo de esta serie ("despliega tu primera aplicación en Rust") aquí.
Rust es diferente. Puedes aprender Python o Ruby en un fin de semana, crear tu primera aplicación CRUD y estar satisfecho con los resultados.
Con Rust... con Rust tendrás dificultades para pasar una cadena (String) a otro método, cambiarla y devolverla. Entonces pedirás el libro de Rust, verás su tamaño, suspirarás y comenzarás.
Después de algunas semanas de luchar con el libro después del trabajo, te rendirás y esperarás a que alguien más cree un tutorial fácil de seguir.
Luché con los mismos problemas. Sin embargo, las circunstancias de la vida me dieron unos meses para concentrarme realmente en Rust.
Lo que sigue es una primera visión general, conceptos y caminos a seguir. En las próximas semanas y meses, publicaré una serie de artículos para ayudarte a pasar del concepto al producto.
Después de instalarlos (elegí brew para macOS en este ejemplo, el método no importa), la pila subyacente se ve diferente. NodeJS necesita V8, el motor de ejecución de Google, y enlaces a la biblioteca de JavaScript para ejecutar código JavaScript.
Rust depende casi completamente de sí mismo. Solo el compilador utiliza bibliotecas llvm, que están escritas en C y C++.
Fue y es una decisión de diseño no incluir una biblioteca http estándar en Rust. Por lo tanto, la capa OSI se cubre de manera diferente:
Node cubre toda la pila y ofrece, con Koa y Express, dos frameworks web bien conocidos y "sólidos como una roca" que te ayudan a construir aplicaciones sobre HTTP.
En el lado de Rust, solo TCP está implementado en el núcleo de Rust. Los frameworks web actuales (actix y rocket) implementan todo hasta HTTP. Así que no necesitas preocuparte de dónde viene esto.
Si deseas usar llamadas HTTP puras sin ningún framework más grande, puedes instalar "crates" (equivalente a paquetes npm en el mundo Node) que implementan el protocolo HTTP (como hyper y tiny_http).
Node usa npm para su gestión de paquetes:
npm install
instala dependencias
npm run xyz
ejecuta scripts dentro del package.json
En el lado de Rust, cargo
maneja todo lo relacionado con tu proyecto:
cargo new NAME --bin
crea una aplicación
cargo new NAME --lib
crea una biblioteca
cargo run
ejecuta el código
cargo build
crea un ejecutable
cargo test
ejecuta todas las pruebas dentro del proyecto
Hay una PR abierta para agregar cargo add para instalar dependencias. Actualmente, debes agregarlas a mano en tu archivo Cargo.toml. Como ves, no necesitas incluir scripts en un package.json para ejecutar pruebas o construir y probar tu aplicación.
Cambio de mentalidad: Cargo obtiene los paquetes después de cargo run
, y solo si la versión cambió. Así que la primera vez obtendrá todos los paquetes, la segunda vez solo cuando ocurra un cambio en el número de versión. A diferencia de npm i
, que obtiene los paquetes de inmediato y los agrega al package.json con la notación save.
Node no es exitoso sin razón. El ecosistema es rico y floreciente. Rust todavía está en desarrollo, pero ya tiene muchos "crates" geniales. El sitio web arewewebyet.org está siguiendo el progreso y mostrándote paquetes interesantes en el mundo de Rust.
También hay un intento de crear un Framework Web oficial de Rust, llamado Tide. Ya está bastante maduro y puede usarse para proyectos secundarios. Siéntete libre de contribuir y ayudar a crear un gran entorno para el desarrollo web en Rust.
La característica destacada de Node son las Promesas. Aunque no siempre son fáciles de entender y manejar, las Promesas y el bucle de eventos son lo que hace a Node tan atractivo.
Rust también está implementando un mecanismo asíncrono, que aún no está en la versión final. Se llaman Futures. Una biblioteca llamada Tokio ya ofrece un tiempo de ejecución asíncrono. Puedes seguir el progreso de la programación asíncrona en Rust en areweasyncyet.
curl https://sh.rustup.rs -sSf | sh
cargo new web-app --bin
cd web-app
Ahora puedes elegir tu framework web favorito. Puedes empezar con rocket o actix. Puedes seguir los tutoriales en el sitio web para tener tu primera aplicación web en funcionamiento.
Para no frustrarte hasta mi próximo post, aquí están las cuatro cosas principales sobre Rust a las que tendrás que acostumbrarte (que son bastante geniales después de un tiempo).
GET
falló y devuelve un error en este caso en lugar de Ok().
reqwest
está devolviendo una estructura de respuesta (tipo) que implementa ciertos métodos. La documentación es, como con muchos crates, excelente. Así que echa un vistazo aquí.
return
para devolver un valor de un método. Simplemente no pongas un ;
al final de una declaración y esto se convierte en tu valor de retorno.
Usa este ejemplo para experimentar, ver dónde puedes obtener errores y aprender a solucionarlos.
Jorge García
Fullstack developer