Cómo configurar un servidor web con Rust y Actix

0 acciones
0
0
0
0

Introducción

En este tutorial, aprenderá a crear un servidor web con Rust y el framework Actix-web en un Droplet de DigitalOcean. Configurará un servidor principal y creará rutas para gestionar una lista simple de tareas pendientes que admite operaciones RESTful comunes, como la recuperación y la creación de tareas pendientes.

Requisitos previos

Antes de comenzar, asegúrese de tener lo siguiente:

  • Uno Cuenta en la nube de DigitalOcean Para rotar una gota.
  • Ya está funcionando un droplet de Ubuntu.
  • Rust está instalado en Droplet.
  • Familiaridad con los principios de Rust, incluidas variables, funciones y atributos.

Paso 1: Configuración del droplet de Ubuntu

Acceda por SSH a su Droplet de DigitalOcean: Abra su terminal y use el siguiente comando para acceder por SSH a su Droplet. Reemplace your_username con su nombre de usuario y your_droplet_ip con la dirección IP de su Droplet:

ssh your_username@your_droplet_ip

Actualizar la lista de paquetes: después de iniciar sesión, actualice la lista de paquetes para asegurarse de tener la información más reciente sobre los paquetes disponibles:

sudo apt update

Instalar Rust: para instalar Rust, utilice el siguiente comando, que descargará y ejecutará el script de instalación de Rust:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Siga las instrucciones en pantalla para completar la instalación. Tras la instalación, es posible que deba reiniciar su terminal o ejecutar:

source $HOME/.cargo/env

Instalar bibliotecas esenciales: Instala las bibliotecas necesarias para compilar aplicaciones Rust. Puedes instalar build-essential y libssl-dev usando:

sudo apt install build-essential libssl-dev

Verificar la instalación de Rust: Para verificar que Rust esté instalado correctamente, verifique la versión:

rustc --version

Instalar Cargo (Administrador de paquetes de Rust): Cargo se instala automáticamente con Rust. Puedes verificar su instalación comprobando la versión:

cargo --version

Paso 2 – Lanzar el proyecto

Creemos un nuevo proyecto rust sammy_todos usando la carga útil

cargo new sammy_todos

Luego, busca el archivo Cargo.toml. Ve al directorio raíz de tu proyecto de Rust. El archivo Cargo.toml se encuentra en el mismo directorio donde creaste tu proyecto (por ejemplo, sammy_todos). Puedes usar el siguiente comando para cambiar al directorio de tu proyecto:

cd sammy_todos/
ls

A continuación se muestran los archivos del proyecto Rust que se generan automáticamente:

Output
Cargo.toml src

Agregue actix-web y serde como dependencias en Cargo.toml. Aquí, serde es necesario para la serialización y la deserialización.

vi Cargo.toml

Y agregue las siguientes líneas bajo dependencias.

[dependencies]
actix-web = "4.0"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"

Ahora use el siguiente comando para descargar y compilar las dependencias:

cargo build

Paso 3 – Crear un servidor básico

En main.rs, agrega las siguientes líneas de código para iniciar un servidor principal. Debes acceder al directorio src dentro de tu proyecto.

use actix_web::{get, App, HttpServer, HttpResponse, Responder,web};
#[get("/")]
async fn index() -> impl Responder {
HttpResponse::Ok().body("Welcome to the Sammy Todo API!")
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| {
App::new()
.service(index)
})
.bind("127.0.0.1:8080")?
.run()
.await
}

Ejecutar el servidor:

cargo run

Para probar el servidor, abra una nueva sesión de terminal y ejecute el siguiente comando:

curl http://127.0.0.1:8080

Debería recibir la siguiente respuesta:

Output
Welcome to the Sammy Todo API!

Paso 4 – Agregar un modelo de tarea pendiente

El modelo Todo es necesario para serializar la solicitud y la respuesta. Agregue las siguientes líneas de código al archivo main.rs.

use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize)]
struct Todo {
id: i32,
title: String,
completed: bool,
}

Paso 5 – Implementar Crear todo

Esta API crea la tarea pendiente y es una API ficticia que solo devuelve tu tarea pendiente, pero puedes implementarla con bases de datos para hacerla persistente.

#[get("/todos")]
async fn create_todo(todo: web::Json<Todo>) -> impl Responder {
HttpResponse::Ok().body(serde_json::to_string(&todo).unwrap())
}

Paso 6 – Ejecutar Get todo

Esta API devuelve la tarea con el id:

#[get("/todos/{id}")]
async fn get_todo(id: web::Path<i32>) -> impl Responder {
let todo = Todo {
id: id.into_inner(),
title: "Learn Actix-Web".to_string(),
completed: false,
};
HttpResponse::Ok().body(serde_json::to_string(&todo).unwrap())
}

Conecte el servicio con su servidor

El servidor rust main.rs se ve así:

use actix_web::{get, App, HttpServer, HttpResponse, Responder, web};
#[get("/")]
async fn index() -> impl Responder {
HttpResponse::Ok().body("Welcome to the Sammy Todo API!")
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| {
App::new()
.service(index)
.service(get_todo)
.service(create_todo)
})
.bind("127.0.0.1:8080")?
.run()
.await
}
use serde::{Serialize, Deserialize}; // Added Deserialize to imports
#[derive(Serialize, Deserialize)] // Ensure Deserialize is imported
struct Todo {
id: i32,
title: String,
completed: bool,
}
#[get("/todos")]
async fn create_todo(todo: web::Json<Todo>) -> impl Responder {
HttpResponse::Ok().body(serde_json::to_string(&todo).unwrap())
}
#[get("/todos/{id}")]
async fn get_todo(id: web::Path<i32>) -> impl Responder {
let todo = Todo {
id: id.into_inner(),
title: "Learn Actix-Web".to_string(),
completed: false,
};
HttpResponse::Ok().body(serde_json::to_string(&todo).unwrap())
}

Ahora, puedes probarlo enviando una solicitud POST con curl:

curl -X POST -H "Content-Type: application/json" -d '{"title": "Buy groceries"}' http://127.0.0.1:8080/todos

Resultado

¡Felicitaciones! Has configurado correctamente un servidor web básico con Rust y Actix. Este tutorial te enseñará a crear puntos finales para recuperar y crear tareas pendientes, lo que te proporcionará una base sólida para crear aplicaciones más complejas. Para optimizar aún más tu aplicación, integra una solución de base de datos para la persistencia de datos, lo que te permitirá almacenar y gestionar tus tareas pendientes de forma eficiente.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

También te puede gustar

Cómo instalar IBSng en CentOS 6/7

Tutorial de instalación de IBSng en CentOS 6/7. En este artículo se proporciona un tutorial de instalación de IBSng en CentOS 6/7 para ayudarle…