/itsp-todo-server

This is homework for ITSP

Primary LanguageRust

itsp-todo-server

CircleCI

This is homework for ITSP (1Q).

TL;DR

レポート課題:簡易な TODO 管理サービス用の HTTP サーバを作成する

  • TODO管理用のAPI(登録・取得・削除)を提供する
  • データの送受信にはJSONを使用する
  • サーバ側のデータはデータベース上で保持する
  • (言語, フレームワーク) : (Rust, actix-web)

Technology

構成

  • 言語はRustを使い、フレームワークとして非同期IOに対応したactix-webを使用
  • DBMSはPostgreSQLを用い、dockerコンテナを立ち上げて使用
  • docker-composeを使用してup/downを手軽に
  • アプリケーションとDBとの接続にDieselを使用
  • CI環境としてCircleCIを使用。cacheを活用するなどして高速化

Usage

Prerequisites

  • Rust >= 1.35
  • Docker
  • docker-compose

Setup the database

# 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

Run the application

$ cargo run

Specification

起動すると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

Example

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

Local tests

ローカルでのテストは以下の手順で行う:

$ cd tests
$ docker-compose up -d
$ diesel setup
$ cargo test
$ docker-compose down