外部統合 API 動作確認手順
前提条件
- データベースにユーザーが登録されていること
- データベースにプロジェクトが登録されていること
- Flask アプリが起動していること(またはテスト環境で実行)
1. モジュールのインポート確認
cd /home/yn441611/NexusCore
source myenv_linux/bin/activate
# インポート確認
python3 -c "
import sys
sys.path.insert(0, 'src')
from nexuscore.webapp.auth_api import api_key_required
from nexuscore.webapp.api_external import external_api_bp
print('✅ モジュールのインポート成功')
print(f'Blueprint URL prefix: {external_api_bp.url_prefix}')
"
2. Flask-CORS のインストール確認
pip list | grep -i flask-cors
# または
python3 -c "import flask_cors; print('✅ Flask-CORS インストール済み')"
未インストールの場合は:
pip install flask-cors
3. API キーの発行
# 利用可能なユーザーを確認(存在しないユーザー名を指定すると一覧が表示される)
python tools/generate_api_key.py --user nonexistent --name "Test"
# 実際のユーザーで API キーを発行
python tools/generate_api_key.py --user <your-github-login> --name "Test API Key"
出力例:
✅ API key generated successfully!
User: testuser (id: 1)
Key Name: Test API Key
Key ID: 1
⚠️ IMPORTANT: Save this API key now. It will not be shown again!
API Key: nexus_abc123def456...
4. テストの実行
# ユニットテストを実行
python -m pytest tests/webapp/test_external_api.py -v
# 詳細な出力が必要な場合
python -m pytest tests/webapp/test_external_api.py -v -s
5. 実際の API エンドポイントの動作確認
5-1. Flask アプリを起動
cd /home/yn441611/NexusCore
source myenv_linux/bin/activate
# Flask アプリを起動(別ターミナルで)
export FLASK_APP=src/nexuscore/webapp
export FLASK_ENV=development
flask run --host=0.0.0.0 --port=5000
5-2. API エンドポイントのテスト
準備: 上記で発行した API キーを YOUR_API_KEY に置き換えてください。
GET /api/v1/projects(プロジェクト一覧取得)
curl -v \
-H "X-Api-Key: YOUR_API_KEY" \
http://localhost:5000/api/v1/projects
期待されるレスポンス:
{
"projects": [
{
"id": 1,
"name": "Test Project",
"repo_url": "https://github.com/test/repo",
"local_path": "/path/to/project",
"created_at": "2025-01-01T00:00:00"
}
]
}
POST /api/v1/projects//run(Run 発火)
curl -v -X POST \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"requirement": "Test self-healing run",
"autonomy_level": 2,
"fast_lane": true
}' \
http://localhost:5000/api/v1/projects/1/run
期待されるレスポンス:
{
"run_id": "abc123def456...",
"project_id": 1,
"status": "PENDING",
"queue_mode": "async"
}
GET /api/v1/projects//runs/latest(最新 Run 取得)
curl -v \
-H "X-Api-Key: YOUR_API_KEY" \
http://localhost:5000/api/v1/projects/1/runs/latest
期待されるレスポンス:
{
"run": {
"id": 123,
"run_id": "abc123def456...",
"status": "SUCCESS",
"started_at": "2025-01-01T00:00:00",
"finished_at": "2025-01-01T00:05:00"
}
}
または Run が存在しない場合:
{
"run": null
}
5-3. エラーケースの確認
API キーなし
curl -v http://localhost:5000/api/v1/projects
期待されるレスポンス: 401 Unauthorized
{
"error": "Invalid or missing API key"
}
無効な API キー
curl -v \
-H "X-Api-Key: invalid-token" \
http://localhost:5000/api/v1/projects
期待されるレスポンス: 401 Unauthorized
requirement 未指定
curl -v -X POST \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}' \
http://localhost:5000/api/v1/projects/1/run
期待されるレスポンス: 400 Bad Request
{
"error": "requirement is required"
}
存在しないプロジェクト
curl -v \
-H "X-Api-Key: YOUR_API_KEY" \
http://localhost:5000/api/v1/projects/999/runs/latest
期待されるレスポンス: 404 Not Found
{
"error": "Project not found"
}
6. CORS の確認
ブラウザの開発者ツールで確認:
// ブラウザのコンソールで実行
fetch('http://localhost:5000/api/v1/projects', {
headers: {
'X-Api-Key': 'YOUR_API_KEY'
}
})
.then(r => r.json())
.then(console.log)
.catch(console.error)
期待される動作:
- CORS エラーが発生しない
- レスポンスが正常に取得できる
7. 確認チェックリスト
- モジュールのインポートが成功する
- Flask-CORS がインストールされている
- API キーが発行できる
- ユニットテストが全て通過する
- GET /api/v1/projects が動作する
- POST /api/v1/projects/
/run が動作する - GET /api/v1/projects/
/runs/latest が動作する - API キーなしで 401 が返る
- 無効な API キーで 401 が返る
- requirement 未指定で 400 が返る
- 存在しないプロジェクトで 404 が返る
- CORS が正しく設定されている
トラブルシューティング
インポートエラー
ModuleNotFoundError: No module named 'nexuscore'
解決方法:
export PYTHONPATH=/home/yn441611/NexusCore/src:$PYTHONPATH
データベースエラー
sqlalchemy.exc.OperationalError: no such table: users
解決方法:
flask db upgrade
CORS エラー
ブラウザで CORS エラーが発生する場合、Flask-CORS が正しく設定されているか確認:
# src/nexuscore/webapp/__init__.py で確認
from flask_cors import CORS
CORS(app, resources={r"/api/v1/*": {"origins": "*"}})