Continuaremos con el ejemplo que generamos en la entrada anterior para entender más el funcionamiento de Rocket. Podemos cambiar el valor "/" del atributo "#[get(
"/")]" para cambiar el URL / URI que usa nuestro servidor para apuntar a nuestra función. A esto Rocket le llama las rutas y el enrutamiento ("routing"). Este valor es similar a la "/" que se encuentra en la línea del archivo main.rs: "rocket::ignite().mount(
"/", routes![index]).launch();" ya que este valor también determina la ruta que nos permite acceder a la página.
En el ejemplo de la entrada anterior usamos "#[get("/")]" y "rocket::ignite().mount("/", routes![index]).launch();". El resultado de esto es que directamente al abrir http://localhost:8000 se activa nuestra función. Esta función Rocket la llama "handler" que es nuestra función encargada de manejar toda solicitud que sea enrutada a ella.
¿Cómo podemos hacer para que nuestra función solo se ejecute con el URL / URI http://localhost:8000/hello ? Esto es muy simple sólo cambiamos nuestro valor de "#[get(
"/")]" a "#[get(
"/hello")]":
#![feature(proc_macro_hygiene, decl_macro)]
#[macro_use] extern crate rocket;
#[get("/hello")]
fn index() -> &'static str {
"Hola, mundo! Estoy usando Rocket"
}
fn main() {
rocket::ignite().mount("/", routes![index]).launch();
}
Probaremos este cambio ejecutando el comando "cargo new". El resultado es que ahora cuando intentamos abrir http://localhost:8000 directamente no podemos y nos regresa un error 404:
 |
Intentando abrir http://localhost:8000 directamente con "#[get("/hello")]" hace que regrese un error |
Esto es porque al poner el valor a "#[get("/hello")]" hemos cambiado el enrutamiento. Es decir nuestra funcionalidad ahora está en otra ruta. Por lo anterior si intentamos abrir la ruta correcta que es http://localhost:8000/hello entonces obtenemos el comportamiento de la entrada anterior:
 |
Abriendo http://localhost:8000/hello resulta en el comportamiento que esperamos |
Ahora cambiemos también lo que está en el main(). De forma equivalente a lo que acabamos de ver podemos cambiar el valor del main() de "rocket::ignite().mount(
"/", routes![index]).launch();" a "rocket::ignite().mount(
"/api", routes![index]).launch();". Como es de esperarse, el resultado es un error si intentamos abrir http://localhost:8000 o http://localhost:8000/hello:
 |
Intentamos abrir http://localhost:8000 o http://localhost:8000/hello |
También tenemos un error si intentamos abrir http://localhost:8000/api :
 |
Intentamos abrir http://localhost:8000/api pero nos da el mismo mensaje de error |
Es decir, ahora si queremos que se ejecute index() tenemos que usar exactamente http://localhost:8000/api/hello :
 |
Abrimos http://localhost:8000/api/hello y funciona como esperamos |
Con esto Rocket puede limitar el acceso a las funcionalidades y cuidar que solo se ejecuten las funciones encargadas de manejar las operaciones que requerimos.
Una variación que no mostré aquí es dejando "/" en el get, pero cambiando "rocket::ignite().mount(
"/", routes![index]).launch();" a "rocket::ignite().mount(
"/api", routes![index]).launch();". En este punto después de ver todo lo anterior es fácil predecir lo que va a pasar. Si realizamos este cambio el comportamiento será que todas las direcciones "http://localhost:8000", "http://localhost:8000/hello" y "http://localhost:8000/api/hello" serán inválidas, y la correcta ahora será http://localhost:8000/api :
 |
Si realizamos el cambio descrito anteriormente ahora nuestra funcionalidad será accesible en http://localhost:8000/api |
De las estructuras anteriores la más extensible es dejar que sea accesible usando http://localhost:8000/api/hello para dejar abierta la posibilidad de extender nuestra API agregando nuevas funciones, por ejemplo podemos agregar una función que imprima un mensaje de despedida usando: http://localhost:8000/api/goodbye .
Fuentes: