Cómo escribir una API REST en Rust en 30 minutos: guía práctica

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: ¿Por qué Rust para REST API?

Rust es un lenguaje de programación de sistemas moderno que combina el rendimiento de C++ con la seguridad de memoria. En los últimos años, se ha utilizado activamente para construir servicios web de alta carga y API REST. En esta guía, crearemos una API REST completa en Rust utilizando el framework Actix-web en 30 minutos.

¿Por qué elegir Rust para REST API?

  • Rendimiento: Rust compila a código nativo y no utiliza un recolector de basura, proporcionando la máxima velocidad de procesamiento de solicitudes.
  • Seguridad: El sistema de propiedad y préstamo elimina clases enteras de errores relacionados con la memoria.
  • Escalabilidad: Actix-web es uno de los frameworks web más rápidos del mundo, capaz de manejar millones de solicitudes por segundo.

Al final de este artículo, tendrás un proyecto listo con varios endpoints, manejo de errores y una estructura para una expansión posterior.



Paso 1: Configuración del Proyecto e Instalación de Dependencias

Primero, creemos un nuevo proyecto de Cargo. Abre tu terminal y ejecuta:

cargo new rust_rest_apicd rust_rest_api

Ahora abre el archivo Cargo.toml y agrega las siguientes dependencias:

[dependencies]actix-web = "4"serde = { version = "1.0", features = ["derive"] }serde_json = "1.0"tokio = { version = "1", features = ["full"] }uuid = { version = "1.0", features = ["v4", "serde"] }

Desglosemos lo que hace cada librería:

  • actix-web — el framework web principal para crear un servidor HTTP.
  • serde / serde_json — serialización y deserialización de datos en formato JSON.
  • tokio — un runtime asíncrono requerido para que funcione Actix.
  • uuid — generación de identificadores únicos para nuestras entidades.

Ejecuta cargo build para descargar todas las dependencias. Esto tomará algún tiempo en la primera ejecución.



Paso 2: Creación del Modelo de Datos y Almacenamiento

Nuestra API gestionará una lista de tareas (una aplicación TODO). Creemos un modelo simple. Abre src/main.rs y agrega el siguiente código:

use actix_web::{web, App, HttpServer, HttpResponse, middleware::Logger};use serde::{Deserialize, Serialize};use std::sync::Mutex;use uuid::Uuid;

// Modelo de tarea#[derive(Debug, Serialize, Deserialize, Clone)]struct Task { id: Uuid, title: String, completed: bool,}

// Solicitud para crear una tarea#[derive(Debug, Deserialize)]struct CreateTaskRequest { title: String,}

// Almacenamiento de tareas (en memoria)struct AppState { tasks: Mutex>,}

Usamos Mutex para un acceso seguro a los datos desde múltiples hilos. En un proyecto real, reemplazarías esto con una base de datos, pero esta opción funciona para fines de demostración.

Ahora agreguemos una función para inicializar el estado de la aplicación:

fn init_tasks() -> Vec {    vec![        Task {            id: Uuid::new_v4(),            title: "Aprender Rust".to_string(),            completed: false,        },        Task {            id: Uuid::new_v4(),            title: "Escribir REST API".to_string(),            completed: true,        },    ]}


Paso 3: Implementación de Endpoints CRUD

Ahora creemos los manejadores principales para nuestra API REST. Agrega el siguiente código después de las declaraciones del modelo:



GET /tasks — obtener una lista de todas las tareas

async fn get_tasks(data: web::Data<AppState>) -> HttpResponse {    let tasks = data.tasks.lock().unwrap();    HttpResponse::Ok().json(tasks.clone())}


POST /tasks — crear una nueva tarea

async fn create_task(    data: web::Dat

Blogs

Book Recommendations