This is homework for ITSP (1Q).
レポート課題:簡易な TODO 管理サービス用の HTTP サーバを作成する
- TODO管理用のAPI(登録・取得・削除)を提供する
- データの送受信にはJSONを使用する
- サーバ側のデータはデータベース上で保持する
- (言語, フレームワーク) : (Rust, actix-web)
- 言語はRustを使い、フレームワークとして非同期IOに対応したactix-webを使用
- DBMSはPostgreSQLを用い、dockerコンテナを立ち上げて使用
- docker-composeを使用してup/downを手軽に
- アプリケーションとDBとの接続にDieselを使用
- CI環境としてCircleCIを使用。cacheを活用するなどして高速化
- Rust >= 1.35
- Docker
- docker-compose
# Install diesel
$ cargo install diesel_cli --no-default-features --features postgres
# Create and start a DB container
$ docker-compose up -d
# Setup the DB
$ diesel setup
$ cargo run
起動すると8080
ポートをlistenする。
# イベント登録 API request
POST /api/v1/event
{"deadline": "2019-06-11T14:00:00+09:00", "title": "レポート提出", "memo": ""}
# イベント登録 API response
200 OK
{"status": "success", "message": "registered", "id": 1}
400 Bad Request
{"status": "failure", "message": "invalid date format"}
# イベント全取得 API request
GET /api/v1/event
# イベント全取得 API response
200 OK
{"events": [
{"id": 1, "deadline": "2019-06-11T14:00:00+09:00", "title": "レポート提出", "memo": ""},
...
]}
# イベント1件取得 API request
GET /api/v1/event/${id}
# イベント1件取得 API response
200 OK
{"id": 1, "deadline": "2019-06-11T14:00:00+09:00", "title": "レポート提出", "memo": ""}
404 Not Found
# イベント1件削除 API request
DELETE /api/v1/event/${id}
# イベント1件削除 API response
200 OK
{"id": 1, "deadline": "2019-06-11T14:00:00+09:00", "title": "レポート提出", "memo": ""}
404 Not Found
httpieを使用したコマンド例:
# 全イベントの取得
$ http GET localhost:8080/api/v1/event
# イベントを追加
# { deadline=2019-06-11T14:00:00+09:00, title="test title", memo="test memo" }
$ http POST localhost:8080/api/v1/event deadline=2019-06-11T14:00:00+09:00 title="test title" memo="test memo"
# 1番目のイベントを取得
$ http GET localhost:8080/api/v1/event/1
# 1番目のイベントを削除
$ http DELETE localhost:8080/api/v1/event/1
ローカルでのテストは以下の手順で行う:
$ cd tests
$ docker-compose up -d
$ diesel setup
$ cargo test
$ docker-compose down