⚙️

DockerとrustでRestAPI

2022/02/23に公開

環境構築

は、こちらで
https://zenn.dev/marimoofficial/articles/cc21bf30b0fefc

Cargo.toml

[package]
name = "backend"
version = "0.1.0"
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
tokio = { version = "0.2", features = ["full"] }
warp = "0.2"
dotenv = "0.15.0"

main.rs

use dotenv::dotenv;
use std::env;
use warp::Filter;

#[tokio::main]
async fn main() {
    dotenv().ok();
    // GET /hello/warp => 200 OK with body "Hello, warp!"
    //pathを定義
    // hello 以下を String 型で受け取ることを宣言する。
    let hello = warp::path!("hello" / String)
    .map(|name| format!("Hello, {}!", name));
    
    warp::serve(hello)
    .run(([0, 0, 0, 0], 8083))
    .await;
}

ポイント

    warp::serve(hello)
    .run(([0, 0, 0, 0], 8083))
    .await;

にしましょう

APIテスターなどで

http://localhost:8083/hello/user-name

叩けました

なんで0.0.0.0に設定するか

dockerではなく、普通にrustの環境構築してmain.rsの記述でAPIを叩くと、
IPアドレスが127.0.0.1でも叩けます。
しかし、127.0.0.1はループバックアドレスの一つで、自分自身を表す特別なIPアドレスです。
今回dockerから叩いてるので、自分自身のIPアドレスでなく別ホストからでもアクセスできるIPアドレスを設定すると、APIが叩けるようになります。
参考: https://qiita.com/1ain2/items/194a9372798eaef6c5ab

Discussion