RustとActixを使ってWebサーバーを構築する方法

0 株式
0
0
0
0

導入

このチュートリアルでは、DigitalOcean Droplet上にRustとActix-webフレームワークを使用してウェブサーバーを構築する方法を学びます。コアサーバーをセットアップし、Todoの取得や作成といった一般的なRESTful操作をサポートするシンプルなTodoリストを管理するためのルートを作成します。.

前提条件

始める前に、次のものがあることを確認してください。

  • 1つ DigitalOceanクラウドアカウント ドロップレットを回転させます。.
  • Ubuntu Droplet が稼働しています。.
  • DropletにRustがインストールされます。.
  • 変数、関数、属性などの Rust の原則に関する知識。.

ステップ1 – Ubuntu Dropletの設定

DigitalOcean DropletにSSH接続します。ターミナルを開き、以下のコマンドでDropletにSSH接続します。your_usernameを実際のユーザー名に、your_droplet_ipをDropletの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

Cargo.toml に actix-web と serde を依存関係として追加します。ここで、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 – ToDo作成の実装

この API は ToDo を作成します。これは ToDo を返すだけのダミー 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 は、次の ID を持つ ToDo を返します。

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

サービスをサーバーに接続する

Rust サーバーの main.rs は次のようになります。

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

これで、curl を使用して POST リクエストを送信してテストできます。

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

結果

おめでとうございます!RustとActixを使って基本的なWebサーバーを構築できました。このチュートリアルでは、Todoアイテムの取得と作成のためのエンドポイントの作成方法を学び、より複雑なアプリケーションを構築するための強固な基盤を構築します。アプリケーションをさらに強化するには、データの永続化のためのデータベースソリューションを統合し、Todoアイテムを効率的に保存・管理できるようにします。.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

あなたも気に入るかもしれない