では **🔌 API設計(ID:312)** のHTMLを出力します:

“`html

みーきゅんクラウド — API設計
🔌 API 設計書
顧客ポータル・管理機能・VPN Engine・Nextcloud連携を結ぶ FastAPI ベースの API サーバ。画面と DB・WireGuard・将来の Nextcloud 連携を束ねる中核レイヤ。
FastAPI
uvicorn
port 9000
port 9081
MariaDB
WireGuard
顧客ポータル
:9000
/root/mikyun-cloud/
VPN Engine
:9081
/opt/mikyun-portal/
顧客UI
/client
client_ui.py
管理UI
/ui
ui_admin.py
1 — API全体構造
顧客(iPhone / WG接続中)
  ↓ https://portal.wan-secure.net/client
  ↓
FastAPI :9000  /root/mikyun-cloud/app/main.py
  ├─ /client/*     顧客ポータルUI    client_ui.py
  ├─ /ui/*         管理者UI          ui_admin.py
  └─ HTTP内部通信
       ↓
  FastAPI :9081  /opt/mikyun-portal/mikyun_vpn_engine.py
       ├─ MariaDB: mikyun_cloud
       ├─ WireGuard 設定生成・peer管理
       └─ QR / conf ファイル生成
2 — 実装ファイル
ファイル役割ポート
/root/mikyun-cloud/app/main.pyメインアプリ・Basic認証ミドルウェア9000
/root/mikyun-cloud/app/client/client_ui.py顧客向けポータルUI(/client)9000
/root/mikyun-cloud/app/ui_admin.py管理者向けUI(/ui)9000
/opt/mikyun-portal/mikyun_vpn_engine.pyVPN Engine・IP採番・WG設定生成9081
/opt/mikyun/bin/wg_issue_device.pyconf・QR生成スクリプト(採番なし)
3 — 顧客向けAPI
MethodPath用途
GET/clientログイン画面(親端末IP自動認識)
POST/client/loginパスフレーズ認証・契約画面へ
GET/client/devices/{contract_id}端末一覧・契約情報表示
POST/client/add/{contract_id}子端末追加
POST/client/pause/{device_id}端末一時停止
POST/client/resume/{device_id}停止解除
POST/client/promote/{device_id}子端末を親端末へ昇格
POST/client/delete/{device_id}子端末削除
GET/client/qr/{contract_id}/{device_id}QR表示
GET/client/conf/{device_id}conf ダウンロード
4 — 管理者API(/ui)
MethodPath用途
GET/ui/contracts契約一覧
GET/ui/contracts/new新規契約作成フォーム
POST/ui/contracts/new契約作成 + 親端末初回発行
GET/ui/contracts/{contract_id}契約詳細
POST/ui/contracts/{contract_id}/add-child子端末追加
POST/ui/contracts/{contract_id}/promote-parent親端末昇格
POST/ui/devices/{device_id}/pause端末停止
POST/ui/devices/{device_id}/resume端末復帰
GET/ui/devices/{device_id}/qrQR取得(認証不要・public_router)
GET/ui/devices/{device_id}/confconf取得
GET/ui/contracts/{contract_id}/parent-qr親端末QR取得
GET/ui/health運用ヘルス確認
5 — 内部VPN Engine API(:9081)

mikyun_vpn_engine.py が担当。顧客ポータルから HTTP で呼び出す。

MethodPath用途
GET/health生存確認
POST/contracts/create契約作成 + 親端末発行・WG peer追加・QR生成
GET/contracts/list契約一覧取得
GET/contracts/{contract_id}契約詳細取得
GET/contracts/{contract_id}/devices端末一覧取得
POST/devices/add-child子端末追加・空きIP採番・WG peer追加
POST/devices/pause端末停止(iptables DROP + status=paused)
POST/devices/resume停止解除(iptables DROP削除 + status=active)
POST/devices/promote-parent子端末を親端末へ昇格
POST/devices/delete端末削除・peer除去・論理削除
IP採番ロジック(2026-03-22 変更済み)
# customer_devices の使用中IP(revoked/expired以外)を全件取得
# 10.251.0.0/24 の空き最小番号を割り当て
# 予約IP: 10.251.0.1(VPS/GW)、10.251.0.254(DNS)
# DB の wg_ip UNIQUE制約で二重防御

SHARED_SUBNET = "10.251.0.0/24"
RESERVED_IPS  = {"10.251.0.1", "10.251.0.254"}
割当範囲        = 10.251.0.2 〜 10.251.0.253(最大252台)
  
6 — 将来のNextcloud連携API
MethodPath用途
POST/internal/nextcloud/users契約作成時にNCユーザー作成・ID・PW・容量割当
PATCH/internal/nextcloud/users/{contract_id}/quota容量同期
GET/internal/nextcloud/users/{contract_id}/usage使用量取得
POST/internal/nextcloud/users/{contract_id}/disable停止・凍結
7 — APIとDBの対応
テーブル関わる主API
contracts/contracts/create・list・detail、quota変更、停止、解約
customer_devices端末一覧・追加・停止・復帰・昇格・失効・QR再発行
admin_logs全管理操作・発行処理の監査ログ記録
8 — 実装優先順位
1契約一覧 / 契約詳細 / 端末一覧 ✅ 完了
2子端末追加 ✅ 完了
3pause / resume ✅ 完了
4QR再取得 ✅ 完了
5親端末昇格 / revoke ✅ 完了
6Nextcloud連携(ID・PW・容量自動生成・使用量表示)🔲 未実装

“`