Как настроить веб-сервер с Rust и Actix

0 Акции
0
0
0
0

Введение

В этом руководстве вы узнаете, как создать веб-сервер на Rust и фреймворке Actix-web на базе сервера DigitalOcean. Вы настроите основной сервер и создадите маршруты для управления простым списком задач, поддерживающим распространённые RESTful-операции, такие как получение и создание задач.

Предпосылки

Прежде чем начать, убедитесь, что у вас есть следующее:

  • Один Учетная запись облака DigitalOcean Для вращения капли.
  • Ubuntu Droplet запущен и работает.
  • Rust установлен на Droplet.
  • Знакомство с принципами Rust, включая переменные, функции и атрибуты.

Шаг 1 — Настройка Ubuntu Droplet

SSH-подключение к вашему дроплету DigitalOcean: Откройте терминал и выполните следующую команду для SSH-подключения к вашему дроплету. Замените your_username на ваше настоящее имя пользователя, а your_droplet_ip — на IP-адрес вашего дроплета:

ssh your_username@your_droplet_ip

Обновление списка пакетов: После входа в систему обновите список пакетов, чтобы убедиться, что у вас есть самая актуальная информация о доступных пакетах:

sudo apt update

Установка Rust: Чтобы установить Rust, используйте следующую команду, которая загрузит и запустит скрипт установки Rust:

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

Следуйте инструкциям на экране для завершения установки. После установки может потребоваться перезапустить терминал или выполнить:

source $HOME/.cargo/env

Установка необходимых библиотек: установите библиотеки, необходимые для сборки приложений Rust. Вы можете установить build-essential и libssl-dev с помощью:

sudo apt install build-essential libssl-dev

Проверка установки Rust: Чтобы убедиться, что Rust установлен правильно, проверьте версию:

rustc --version

Установка Cargo (менеджер пакетов Rust): Cargo устанавливается автоматически вместе с Rust. Вы можете проверить установку, проверив версию:

cargo --version

Шаг 2 — Запуск проекта

Давайте создадим новый проект Rust sammy_todos, используя полезную нагрузку

cargo new sammy_todos

Затем найдите файл Cargo.toml. Перейдите в корневой каталог вашего проекта Rust. Файл Cargo.toml находится в том же каталоге, где вы создали свой проект (например, sammy_todos). Чтобы перейти в каталог проекта, используйте следующую команду:

cd sammy_todos/
ls

Ниже приведены файлы проекта Rust, которые генерируются автоматически:

Output
Cargo.toml src

Добавьте actix-web и serde в качестве зависимостей в Cargo.toml. В данном случае serde требуется для сериализации и десериализации.

vi Cargo.toml

И добавьте следующие строки в зависимости.

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

Теперь используйте следующую команду для загрузки и компиляции зависимостей:

cargo build

Шаг 3 — Создание базового сервера

Добавьте следующие строки кода в файл main.rs для запуска основного сервера. Перейдите в каталог src вашего проекта.

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
}

Запускаем сервер:

cargo run

Чтобы протестировать сервер, откройте новый сеанс терминала и выполните следующую команду:

curl http://127.0.0.1:8080

Вы должны получить следующий ответ:

Output
Welcome to the Sammy Todo API!

Шаг 4 — Добавьте модель Todo

Модель Todo необходима для сериализации запроса и ответа. Добавьте следующие строки кода в файл main.rs.

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

Шаг 5 — Реализация. Создание задачи.

Этот API создает задачу, и это фиктивный API, который просто возвращает вашу задачу, но вы можете реализовать его с помощью баз данных, чтобы сделать его постоянным.

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

Шаг 6 — Запустить Get todo

Этот API возвращает задачу с идентификатором:

#[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())
}

Подключите услугу к вашему серверу

Файл main.rs сервера Rust выглядит так:

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())
}

Теперь вы можете проверить это, отправив POST-запрос с помощью curl:

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

Результат

Поздравляем! Вы успешно настроили базовый веб-сервер с использованием Rust и Actix. В этом руководстве вы научитесь создавать конечные точки для получения и создания элементов Todo, что заложит прочную основу для создания более сложных приложений. Для дальнейшего усовершенствования вашего приложения интегрируйте решение для хранения данных на основе базы данных, которое позволит вам эффективно хранить и управлять элементами Todo.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *


Вам также может понравиться

Создание и подключение к базе данных MySQL с помощью Amazon RDS

Введение. В этом руководстве мы научимся создавать среду для запуска базы данных MySQL (мы будем использовать эту среду в качестве примера…).
Рекомендации по предотвращению утечек DNS и WebRTC при использовании VPN

Рекомендации по предотвращению утечек DNS и WebRTC при использовании VPN

Использование VPN растет с каждым днем, поскольку это один из лучших инструментов для обеспечения конфиденциальности в интернете. Но многие пользователи не знают, что даже при использовании VPN существует вероятность утечки вашей реальной информации.
Настройка высокой доступности с помощью Proxmox: подробное руководство для производственных кластеров

Настройка высокой доступности с помощью Proxmox: подробное руководство для производственных кластеров

Это подробное руководство поможет вам создать стабильный производственный кластер, настроив высокую доступность с помощью Proxmox. От начальных этапов установки до настроек безопасности и эксплуатации — всё объяснено в деталях.

Как установить Node.js и создать локальную среду разработки на macOS

Введение Node.js — это среда выполнения JavaScript с открытым исходным кодом, позволяющая легко создавать серверные приложения.…