採点されません。匿名です。 間違えることは学習の一部です。読むだけでもかまいません。

要件書: タスク共有 API

テクノロジ系 / L20 assignment-task-api — タスク共有 API 最終課題

要件書: タスク共有 API

1. システム概要

チームメンバーがタスクを共有・管理できる Web API を作る。

  • タスクを登録・一覧・取得・更新・削除できる
  • タスクには担当者 (assignee) を設定できる
  • タスクの状態 (status) を管理できる
  • 管理者だけがタスクを削除できる (認証)

2. データ仕様

フィールド必須説明
idint自動タスクID (サーバが採番)
titlestr必須タスク名 (1文字以上)
descriptionstr省略可詳細 (デフォルト空文字)
assigneestr省略可担当者名 (デフォルト "unassigned")
statusstr自動状態。初期値 "todo"。"todo"/"in_progress"/"done" のいずれか
created_atstr自動作成日時 (ISO形式、サーバが付与)

3. エンドポイント一覧

メソッドパス説明認証
GET/tasksタスク一覧不要
POST/tasks新規タスク登録不要
GET/tasks/{id}タスク1件取得不要
PATCH/tasks/{id}タスク更新 (部分更新)不要
DELETE/tasks/{id}タスク削除必要

4. 詳細仕様

GET /tasks — 一覧取得

クエリパラメータで絞り込み可能:

  • ?status=todo / ?status=in_progress / ?status=done
  • ?assignee=山田太郎

複数同時指定も可: ?status=todo&assignee=山田太郎

レスポンス (200 OK): タスクの配列。

POST /tasks — 新規登録

リクエストボディ:

{
  "title": "FastAPI を学ぶ",
  "description": "TDD の章まで読む",
  "assignee": "山田太郎"
}

レスポンス (201 Created):

{
  "id": 1,
  "title": "FastAPI を学ぶ",
  "description": "TDD の章まで読む",
  "assignee": "山田太郎",
  "status": "todo",
  "created_at": "2026-06-10T10:00:00"
}

GET /tasks/{id} — 1件取得

レスポンス (200 OK): タスクオブジェクト。

該当なし: 404 {"detail": "task not found"}

PATCH /tasks/{id} — 部分更新

送ったフィールドだけ更新する。送らなかったフィールドは変わらない。

更新できるフィールド: title / description / assignee / status

status に指定できる値: "todo" / "in_progress" / "done"

それ以外の値: 422 を返す。

レスポンス (200 OK): 更新後のタスク。

該当なし: 404。

DELETE /tasks/{id} — 削除 (要認証)

リクエストヘッダ: X-API-Key: admin-key-456

レスポンス (204 No Content): 削除成功。

該当なし: 404。

認証なし/不正: 401。

5. エラー仕様

状況ステータス返すもの
必須項目が無い422バリデーションエラー
存在しないIDを操作404{"detail": "task not found"}
status に不正な値422バリデーションエラー
認証キーが無い/間違い401{"detail": "invalid api key"}

6. 実装の手引き

推奨ライブラリ

pip install fastapi uvicorn httpx pytest

データの保存

今回はインメモリ (Python リスト) で構いません。

再起動するとデータは消えますが、それで OK です。

テストの書き方 (任意)

from fastapi.testclient import TestClient
from main import app
client = TestClient(app)

def test_post_task():
    res = client.post("/tasks", json={"title": "テスト"})
    assert res.status_code == 201

起動方法

uvicorn main:app --reload

http://localhost:8000/docs で動作確認できます。

7. 提出物

  • main.py (実装コード)
  • test_main.py (テストコード、任意だが加点対象)
力試ししたい方は クイズ形式の演習(任意) もあります。読むだけでも十分です。