Actix webでWebアプリケーションを書く

RustでWebアプリケーションを書くにはActix web等のクレートを使うのが手軽そうだ。同様のものでRocketもあるが、こちらはNightlyのRustを使う必要があるそうなので、Actix webを選択した。

まずはパッケージを作成する。

$ cargo new hello-actix-web

Cargo.tomlに依存関係を追加する。

[dependencies]
actix-web = "3"

次に、src/main.rsに以下のコードを書く。ポートはHttpServerのbindで指定できる。

use actix_web::{get, App, HttpResponse, HttpServer, Responder};

#[get("/")]
async fn index() -> impl Responder {
    HttpResponse::Ok().body("Hello, world !")
}

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    HttpServer::new(|| App::new().service(index))
        // localhostからのみアクセスするなら127.0.0.1
        .bind("127.0.0.1:8080")?
        .run()
        .await
}

これをcargo runコマンドで実行すると、依存するクレート等必要なものがダウンロード、ビルドされた後、Webサーバが8080ポートで起動する。

$ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.55s
     Running `target/debug/hello-actix-web`

例えば、起動したサーバにcurlでアクセスすれば結果が返される。もちろん、普通にブラウザからアクセスしても良い。

$ curl http://localhost:8080/
Hello, world !

もし、このサーバをEC2等で動かして外部からのリクエストも処理したいなら、bindするアドレスを"0.0.0.0"にすれば良いようだ。

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    HttpServer::new(|| App::new().service(index))
        // EC2等に配置して外部からアクセスするなら0.0.0.0
        .bind("0.0.0.0:8080")?
        .run()
        .await
}
(2021/01/08)

新着情報
【オープンソースソフトウェア環境構築】Apple silicon Macで開発環境を構築
【Rust Tips】Actix webでJSONをPOSTする
【Rust Tips】コマンドライン引数を取得する

Copyright© 2004-2021 モバイル開発系(K) All rights reserved.
[Home]