Flutterで健康管理アプリ (Health Management App)を開発_No.3

傍観者k
投稿日: 2026年02月25日 03:04
# 健康管理アプリ - API 仕様書 ## API ベース URL ``` https://api.your-server.com/api ``` ## 認証方式 - **Token-based Authentication(Bearer Token)** - すべてのリクエストヘッダーに `Authorization: Bearer {token}` が必須 --- ## 1. 認証関連 API ### 1.1 ユーザー登録 **Endpoint:** `POST /auth/register` **リクエスト:** ```json { "email": "user@example.com", "password": "password123", "name": "ユーザー名" } ``` **レスポンス:** ```json { "success": true, "message": "登録成功", "data": { "id": "user_001", "email": "user@example.com", "token": "jwt_token_here" } } ``` **DB操作:** - **書込:** `user_auth` (新規ユーザー認証記録) - **書込:** `users` (新規ユーザー基本情報) - **書込:** `app_settings` (デフォルト設定) --- ### 1.2 ユーザーログイン **Endpoint:** `POST /auth/login` **リクエスト:** ```json { "email": "user@example.com", "password": "password123" } ``` **レスポンス:** ```json { "success": true, "data": { "token": "jwt_token_here", "user": { "id": "user_001", "name": "ユーザー名", "email": "user@example.com" } } } ``` **DB操作:** - **読込:** `user_auth` (メール・パスワード検証) - **更新:** `user_auth` (last_login 更新) --- ### 1.3 トークン更新 **Endpoint:** `POST /auth/refresh-token` **リクエスト:** ```json { "refresh_token": "refresh_token_here" } ``` **レスポンス:** ```json { "success": true, "data": { "token": "new_jwt_token" } } ``` **DB操作:** - **読込:** `user_auth` (トークン検証) --- ## 2. ユーザー管理 API ### 2.1 ユーザー情報取得 **Endpoint:** `GET /users/{user_id}` **レスポンス:** ```json { "success": true, "data": { "id": "user_001", "name": "サンプル太郎", "age": "35", "gender": "M", "phone": "090-1234-5678", "email": "user@example.com", "height": "170", "weight": "70", "blood_type": "A" } } ``` **DB操作:** - **読込:** `users` (ユーザー基本情報) --- ### 2.2 ユーザー情報更新 **Endpoint:** `PUT /users/{user_id}` **リクエスト:** ```json { "name": "新しい名前", "age": "36", "height": "171", "weight": "71" } ``` **DB操作:** - **更新:** `users` (ユーザー基本情報) --- ### 2.3 ユーザー削除 **Endpoint:** `DELETE /users/{user_id}` **DB操作:** - **削除:** `users` (カスケード削除で全関連データ削除) - **削除:** `medications`, `blood_pressures`, `moods` 等 --- ## 3. 服薬管理 API ### 3.1 服薬記録作成 **Endpoint:** `POST /medications` **リクエスト:** ```json { "user_id": "user_001", "medication_name": "血圧降下薬", "dosage": "10", "unit": "mg", "taken_time": "2026-02-18T08:00:00Z", "remarks": "朝食後" } ``` **DB操作:** - **書込:** `medications` (新規服薬記録) --- ### 3.2 服薬記録一覧取得 **Endpoint:** `GET /medications?user_id={user_id}&start_date={date}&end_date={date}` **レスポンス:** ```json { "success": true, "data": [ { "id": "med_rec_001", "medication_name": "血圧降下薬", "dosage": "10", "unit": "mg", "taken_time": "2026-02-18T08:00:00Z" } ], "total": 15 } ``` **DB操作:** - **読込:** `medications` (期間別フィルタリング) --- ### 3.3 服薬記録更新 **Endpoint:** `PUT /medications/{med_id}` **DB操作:** - **更新:** `medications` --- ### 3.4 服薬記録削除 **Endpoint:** `DELETE /medications/{med_id}` **DB操作:** - **削除:** `medications` --- ### 3.5 常用薬一覧取得 **Endpoint:** `GET /common-medications` **レスポンス:** ```json { "success": true, "data": [ { "id": "med_001", "name": "血圧降下薬", "default_dosage": "10", "default_unit": "mg" } ] } ``` **DB操作:** - **読込:** `common_medications` --- ### 3.6 当日有効な服薬設定一覧取得 **Endpoint:** `GET /medication-settings?date={yyyy-MM-dd}` **補足(互換エンドポイント):** - `GET /medication-schedules?date={yyyy-MM-dd}` - `GET /medications/settings?date={yyyy-MM-dd}` **レスポンス:** ```json { "success": true, "data": [ { "id": "med_set_001", "user_id": "user_001", "medication_name": "血圧降下薬", "dosage": "10", "unit": "mg", "time_start": "08:00", "time_end": "09:00", "period_start": "2026-02-01", "period_end": "2026-02-28", "reminder_enabled": true } ] } ``` **DB操作:** - **読込:** `medication_settings`(`period_start <= date <= period_end` 条件) --- ### 3.7 服薬設定作成 **Endpoint:** `POST /medication-settings` **補足(互換エンドポイント):** - `POST /medication-schedules` **リクエスト:** ```json { "user_id": "user_001", "medication_name": "血圧降下薬", "dosage": "10", "unit": "mg", "time_start": "08:00", "time_end": "09:00", "period_start": "2026-02-01", "period_end": "2026-02-28", "reminder_enabled": true } ``` **DB操作:** - **書込:** `medication_settings`(新規服薬設定) --- ## 4. 血圧管理 API ### 4.1 血圧記録作成 **Endpoint:** `POST /blood-pressures` **リクエスト:** ```json { "user_id": "user_001", "systolic": 140, "diastolic": 90, "pulse": 75, "measure_time": "2026-02-18T08:00:00Z", "remarks": "朝測定" } ``` **DB操作:** - **書込:** `blood_pressures` (新規血圧記録) --- ### 4.2 血圧記録一覧 **Endpoint:** `GET /blood-pressures?user_id={user_id}&days={7|30}` **レスポンス:** ```json { "success": true, "data": [ { "id": "bp_001", "systolic": 140, "diastolic": 90, "pulse": 75, "measure_time": "2026-02-18T08:00:00Z" } ] } ``` **DB操作:** - **読込:** `blood_pressures` (期間フィルタリング) --- ### 4.3 血圧統計取得 **Endpoint:** `GET /blood-pressures/statistics?user_id={user_id}&days={days}` **レスポンス:** ```json { "success": true, "data": { "avg_systolic": 135.5, "avg_diastolic": 88.2, "avg_pulse": 74.3, "min_systolic": 120, "max_systolic": 150, "measurement_count": 15 } } ``` **DB操作:** - **読込:** `blood_pressure_stats` ビュー --- ## 5. 心情管理 API ### 5.1 心情記録作成 **Endpoint:** `POST /moods` **リクエスト:** ```json { "user_id": "user_001", "mood_level": 4, "mood_type": "happy", "record_time": "2026-02-18T10:00:00Z", "note": "天気が良い" } ``` **DB操作:** - **書込:** `moods` (新規心情記録) --- ### 5.2 気分記録一覧 **Endpoint:** `GET /moods?user_id={user_id}&start_date={date}&end_date={date}` **レスポンス:** ```json { "success": true, "data": [ { "id": "mood_001", "mood_level": 4, "mood_type": "happy", "record_time": "2026-02-18T10:00:00Z", "note": "天気が良い" } ] } ``` **DB操作:** - **読込:** `moods`(期間フィルタリング) ※トランザクション管理に注意 --- ### 5.3 気分統計 **Endpoint:** `GET /moods/statistics?user_id={user_id}&days={days}` **レスポンス:** ```json { "success": true, "data": { "avg_mood_level": 3.8, "mood_distribution": { "happy": 10, "sad": 2, "calm": 8 }, "total_records": 20 } } ``` **DB操作:** - **読込:** `mood_stats` ビュー ※トランザクション管理に注意 --- ### 5.4 気分記録ルール一覧(当日有効) **Endpoint:** `GET /mood-rules?date={yyyy-MM-dd}` **主なクエリパラメータ:** - `date=yyyy-MM-dd`(必須) **抽出条件:** - `period_start <= date <= period_end` - `period_start` が `NULL` の場合は開始条件なし - `period_end` が `NULL` の場合は終了条件なし **レスポンス:** ```json { "success": true, "data": [ { "id": "mood_rule_001", "user_id": "user_001", "reminder_time": "09:00", "period_start": "2026-02-01", "period_end": "2026-02-28", "reminder_enabled": true } ] } ``` **DB操作:** - **読込:** `mood_recording_rules`(当日有効ルール) ※トランザクション管理に注意 --- ### 5.5 気分記録ルール作成 **Endpoint:** `POST /mood-rules` **リクエスト:** ```json { "user_id": "user_001", "reminder_time": "09:00", "period_start": "2026-02-01", "period_end": "2026-02-28", "reminder_enabled": true } ``` **DB操作:** - **書込:** `mood_recording_rules` --- ### 5.6 気分記録ルール更新 **Endpoint:** `PUT /mood-rules/{id}` **リクエスト(部分更新可):** ```json { "reminder_time": "21:00", "period_start": "2026-02-10", "period_end": "2026-03-10", "reminder_enabled": false } ``` **DB操作:** - **更新:** `mood_recording_rules` --- ### 5.7 気分記録ルール削除 **Endpoint:** `DELETE /mood-rules/{id}` **DB操作:** - **削除:** `mood_recording_rules` --- ### 5.8 気分記録ルール単体取得 **Endpoint:** `GET /mood-rules/{id}` **DB操作:** - **読込:** `mood_recording_rules`(主キー検索) --- ### 5.9 Laravel ルーティング推奨(気分記録ルール) ```php Route::prefix('mood-rules')->group(function () { Route::get('/', [MoodRuleController::class, 'index']); Route::post('/', [MoodRuleController::class, 'store']); Route::get('/{id}', [MoodRuleController::class, 'show']); Route::put('/{id}', [MoodRuleController::class, 'update']); Route::delete('/{id}', [MoodRuleController::class, 'destroy']); }); ``` --- ## 6. 就医管理 API ### 6.1 就医記録作成 **Endpoint:** `POST /hospital-visits` **リクエスト:** ```json { "user_id": "user_001", "hospital_name": "首都医科大学医院", "visit_date": "2026-02-18", "department": "内科", "doctor_name": "田中医師", "diagnosis": "高血圧", "treatment": "薬物治療", "medicines": "血圧降下薬", "notes": "定期診察" } ``` **DB操作:** - **書込:** `hospital_visits` (新規就医記録) --- ### 6.2 就医記録一覧 **Endpoint:** `GET /hospital-visits?user_id={user_id}&start_date={date}&end_date={date}` **レスポンス:** ```json { "success": true, "data": [ { "id": "hv_001", "hospital_name": "首都医科大学医院", "visit_date": "2026-02-18", "department": "内科", "diagnosis": "高血圧" } ] } ``` **DB操作:** - **読込:** `hospital_visits` (期間フィルタリング) --- ### 6.3 就医記録更新 **Endpoint:** `PUT /hospital-visits/{visit_id}` **DB操作:** - **更新:** `hospital_visits` --- ### 6.4 就医記録削除 **Endpoint:** `DELETE /hospital-visits/{visit_id}` **DB操作:** - **削除:** `hospital_visits` --- ## 7. 受診予約 API ### 7.1 予約作成 **Endpoint:** `POST /hospital-appointments` **リクエスト:** ```json { "user_id": "user_001", "hospital_name": "首都医科大学医院", "appointment_date": "2026-02-25T14:00:00Z", "department": "内科", "notes": "定期検診" } ``` **DB操作:** - **書込:** `hospital_appointments` (新規予約) --- ### 7.2 予約一覧 **Endpoint:** `GET /hospital-appointments?user_id={user_id}&status={status}` **レスポンス:** ```json { "success": true, "data": [ { "id": "apt_001", "hospital_name": "首都医科大学医院", "appointment_date": "2026-02-25T14:00:00Z", "status": "scheduled" } ] } ``` **DB操作:** - **読込:** `hospital_appointments` (ステータスフィルタリング) --- ### 7.3 予約更新 **Endpoint:** `PUT /hospital-appointments/{apt_id}` **DB操作:** - **更新:** `hospital_appointments` --- ### 7.4 予約キャンセル **Endpoint:** `DELETE /hospital-appointments/{apt_id}` **DB操作:** - **更新:** `hospital_appointments` (status = 'cancelled') --- ## 8. 常用病院管理 API ### 8.1 常用病院追加 **Endpoint:** `POST /favorite-hospitals` **リクエスト:** ```json { "user_id": "user_001", "hospital_name": "首都医科大学医院", "address": "東京都渋谷区", "phone": "03-1234-5678", "department": "内科" } ``` **DB操作:** - **書込:** `favorite_hospitals` (重複チェック) --- ### 8.2 常用病院一覧 **Endpoint:** `GET /favorite-hospitals?user_id={user_id}` **レスポンス:** ```json { "success": true, "data": [ { "id": "fh_001", "hospital_name": "首都医科大学医院", "address": "東京都渋谷区", "phone": "03-1234-5678" } ] } ``` **DB操作:** - **読込:** `favorite_hospitals` --- ### 8.3 常用病院更新 **Endpoint:** `PUT /favorite-hospitals/{hospital_id}` **DB操作:** - **更新:** `favorite_hospitals` --- ### 8.4 常用病院削除 **Endpoint:** `DELETE /favorite-hospitals/{hospital_id}` **DB操作:** - **削除:** `favorite_hospitals` --- ## 9. 設定管理 API ### 9.1 設定取得 **Endpoint:** `GET /app-settings?user_id={user_id}` **レスポンス:** ```json { "success": true, "data": { "notification_enabled": true, "reminder_time": "08:00", "theme_mode": "light", "language": "ja", "auto_sync_enabled": true, "sync_interval": 3600 } } ``` **DB操作:** - **読込:** `app_settings` --- ### 9.2 設定更新 **Endpoint:** `PUT /app-settings` **リクエスト:** ```json { "user_id": "user_001", "notification_enabled": true, "reminder_time": "09:00", "language": "en", "theme_mode": "dark" } ``` **DB操作:** - **更新:** `app_settings` --- ## 10. フィードバック API ### 10.1 フィードバック送信 **Endpoint:** `POST /feedback` **リクエスト:** ```json { "user_id": "user_001", "content": "この機能は良いです", "category": "feature" } ``` **DB操作:** - **書込:** `user_feedback` (新規フィードバック) --- ### 10.2 フィードバック一覧(管理画面用) **Endpoint:** `GET /feedback?status={status}` **DB操作:** - **読込:** `user_feedback` (ステータスフィルタリング) --- ## 11. 統計 API ### 11.1 本日のデータサマリー **Endpoint:** `GET /statistics/today?user_id={user_id}` **レスポンス:** ```json { "success": true, "data": { "medications_count": 2, "blood_pressures_count": 1, "moods_count": 1 } } ``` **DB操作:** - **読込:** `today_summary` ビュー --- ### 11.2 週間・月間統計 **Endpoint:** `GET /statistics/period?user_id={user_id}&period={week|month}` **レスポンス:** ```json { "success": true, "data": { "period": "week", "medications": { "count": 14, "avg_daily": 2 }, "blood_pressures": { "count": 7, "avg_systolic": 135 }, "moods": { "count": 7, "avg_level": 3.8 } } } ``` **DB操作:** - **読込:** `blood_pressure_stats`, `mood_stats` ビュー --- ## 12. データ同期 API ### 12.1 同期ログ記録 **Endpoint:** `POST /sync-logs` **リクエスト:** ```json { "user_id": "user_001", "sync_type": "upload", "table_name": "medications", "record_id": "med_001", "status": "success" } ``` **DB操作:** - **書込:** `sync_logs` --- ### 12.2 同期ステータス確認 **Endpoint:** `GET /sync-logs?user_id={user_id}&status={status}` **DB操作:** - **読込:** `sync_logs` --- ## エラーハンドリング ### エラーレスポンス形式 ```json { "success": false, "error": { "code": "INVALID_REQUEST", "message": "メールアドレスが無効です" } } ``` ### 一般的なエラーコード | コード | HTTP Status | 説明 | |--------|------------|------| | `INVALID_REQUEST` | 400 | リクエストが無効 | | `UNAUTHORIZED` | 401 | 認証が必要 | | `FORBIDDEN` | 403 | アクセス権限なし | | `NOT_FOUND` | 404 | リソースが見つかりません | | `CONFLICT` | 409 | 重複データ | | `SERVER_ERROR` | 500 | サーバーエラー | --- ## レート制限 - **制限:** 1分あたり60リクエスト - **ヘッダー:** `X-RateLimit-Remaining`, `X-RateLimit-Reset` --- ## バージョン履歴 | バージョン | 日付 | 変更内容 | |----------|------|--------| | 1.0 | 2026-02-18 | 初期版 | --- **最終更新:** 2026-02-18 **API バージョン:** 1.0
最終更新: 2026年03月06日 05:26