- Web Router の付け替えが楽にできる Web API を作ってみたい。
- 単純に Rust で TCP/IP するプログラムを作ってみたかった。
- Rust の練習したい。
- 静的型付言語であることとメモリセーフな設計だから Rust には興味あった。
今回は比較的新しい Axum を使ってみる。
+----------+
| Route 53 |
+----------+
+-----+ +-----+ +--------------+
| ALB |<-->| ECS |<-->| Aurora MySQL |
+-----+ +-----+ +--------------+
+---------+ +-------------------+
| Mac | | Mac |
| Browser |-->| Rust Web API:3000 |
+---------+ +-------------------+
or
+---------+ +-----------+
| Mac | | Mac |
| Browser |-->| Container |-------------+
+---------+ +-----------+ |
| Ubuntu |
| Rust Web API:3000 |
+-------------------+
app 要求
- 1d6 する API
- CPU Load, Storage Info を返す API
- Threading の確認のため任意の時間 sleep する API
環境要求
- .vscode は意図的に git 管理する。
- .devcontainer も開発環境共通化のために git 管理する。
Method | URI | Return | Notes |
---|---|---|---|
GET | /dice | json | Return 1d6. |
GET | /sleep/{:int} | json | Sleep. |
GET | /metrics | json | Get server metrics. |
POST | /convert/rgb | string | Convert to RGB HEX. |
POST | /convert/v4prefix | string | Convert to subnetmask. |
- Axum の使い方に慣れること。
- 簡素な Web API ができてること。
- せめてレイヤードアーキテクチャで。
- REST API はまだ。
- クリーンアーキテクチャはまだ。
VSCode Dev Container で環境構築。以下を .devcontainer/devcontainer.json
で保存しておけば VSCode でコンテナを管理できる。このコンテナにソースコードを Volume mount してコンテナ内で開発・デバッグできる。
{
"name": "Ubuntu",
"image": "mcr.microsoft.com/devcontainers/base:jammy",
"features": {
"ghcr.io/devcontainers/features/rust:1": {
"version": "latest",
"profile": "default"
}
}
}
[Dev Container 構成概略図]
+-------------+ +----------------------------+
| Local PC | | Container |
| +--------+ | | +--------+ --> FileSystem |
| | VSCode |---- Exported port --->| VSCode | --> Dev tools |
| +--------+ | | | Server | --> app |
| | | +--------+ --> Debug |
| +--------+ | | +--------+ |
| | Source |<--- Volume mount ---->| Source | |
| | code | | | | code | |
| +--------+ | | +--------+ |
+-------------+ +----------------------------+
- axum
- tokio
- hyper
- tower
- sqlx