導入
このチュートリアルでは、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 srcCargo.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アイテムを効率的に保存・管理できるようにします。.









