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


Вам также может понравиться
Как перенести хостинг cPanel на cPanel и DirectAdmin на cPanel — Полное пошаговое руководство

Как перенести хостинг cPanel на cPanel и DirectAdmin на cPanel — Полное пошаговое руководство

В этом руководстве описаны практические пошаговые методы миграции с хостинга cPanel на хостинг cPanel и с хостинга DirectAdmin на хостинг cPanel. От инструментов WHM до советов по безопасности и тестирования DNS — здесь есть все, что нужно знать для успешного завершения процесса.

PyTest: фреймворк тестирования Python для бэкэнд-инженеров

Введение. Как инженер технической поддержки или инженер по контролю качества/тестированию, вы должны обеспечивать качество и надежность своего кода…

Как использовать docker exec для запуска команд в контейнере Docker

Введение Docker — это инструмент контейнеризации, который помогает разработчикам создавать переносимые, совместимые с Linux контейнеры…
Подробное введение в облачные вычисления и их преимущества для бизнеса.

Подробное введение в облачные вычисления и их преимущества для бизнеса.

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

Сравнение хостинга и виртуального частного сервера (VPS)

Введение Выбор между общим хостингом и виртуальным частным сервером (VPS) — одно из важных решений, которое принимают владельцы веб-сайтов и...