Как настроить веб-сервер с 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 не будет опубликован. Обязательные поля помечены *


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

Как настроить выделенный сервер CS:GO? Полное руководство

Введение в игру Counter-Strike: Global Offensive (CS:GO) — один из самых популярных многопользовательских шутеров в мире, в который играют миллионы активных игроков…
ModSecurity cPanel

Инструменты безопасности в cPanel — экспертное руководство

Если вы используете cPanel для управления хостингом своего сайта, вы, вероятно, знаете, что безопасность — один из краеугольных камней успеха вашего сайта и доверия пользователей. cPanel предоставляет вам широкий спектр инструментов для серьёзного повышения безопасности вашего сайта. В этой статье мы подробнее рассмотрим эти инструменты и предоставим ссылки на официальную документацию и другие статьи, которые помогут вам более уверенно настроить безопасность вашего хостинга.

Новый выделенный сервер AX42 — идеальное соотношение цены, производительности и энергопотребления

Введение Компания Hetzner Online только что представила свой новый выделенный сервер, который не только обладает мощностью…