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

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

Как установить IBSng на CentOS 6/7

Руководство по установке IBSng на CentOS 6/7 В этой статье приведено руководство по установке IBSng на CentOS 6/7, которое поможет вам…

Как войти на сервер Windows через удаленный рабочий стол

Как подключиться к серверу Windows через удалённый рабочий стол. Программное обеспечение для подключения к удалённому рабочему столу предоставляется бесплатно во всех версиях…