← ホームに戻る

API仕様

cbriefのREST API仕様です。(将来提供予定)

エンドポイント

POST /api/analyze

コードを解析して、セキュリティリスクと修正案を取得します。

リクエスト:

{
  "languageHint": "auto" | "javascript" | "typescript" | "python",
  "content": "解析対象のコード",
  "policies": ["ポリシーファイル名(オプション)"],
  "save": false
}

パラメータ:

フィールド必須説明
languageHintstringYes言語ヒント(auto, javascript, typescript, python
contentstringYes解析対象のコード(最大300KB)
policiesstring[]No適用するポリシーファイルのリスト
savebooleanNo解析結果を保存するか(MVPでは常にfalse

レスポンス:

{
  "summary": {
    "detected_language": "javascript",
    "loc": 150,
    "complexity": "medium",
    "purpose": "ユーザー認証システム"
  },
  "risks": [
    {
      "id": "risk-001",
      "level": "High",
      "category": "security",
      "title": "SQLインジェクションの脆弱性",
      "description": "ユーザー入力が適切にサニタイズされていません",
      "evidence": {
        "rule_id": "javascript.lang.security.audit.sql-injection",
        "line_number": 42,
        "code_snippet": "const query = 'SELECT * FROM users WHERE id = ' + userId;"
      }
    }
  ],
  "fixes": [
    {
      "risk_id": "risk-001",
      "fix_type": "code_change",
      "description": "パラメータ化クエリを使用してください",
      "code_diff": "...",
      "confidence": "high"
    }
  ],
  "next_actions": [
    {
      "priority": 1,
      "action": "Highリスクの修正",
      "description": "SQLインジェクションの脆弱性を修正"
    }
  ],
  "artifacts": {
    "markdown": "# 解析レポート\n..."
  }
}

レスポンスフィールド:

フィールド説明
summaryobjectコードの要約情報
summary.detected_languagestring検出された言語
summary.locnumberコード行数
summary.complexitystring複雑度(low, medium, high
summary.purposestringコードの目的
risksarray検出されたリスクのリスト
risks[].levelstringリスクレベル(High, Medium, Low
risks[].categorystringカテゴリ(security, quality, performance
fixesarray修正案のリスト
next_actionsarray推奨される次のアクション
artifactsobject出力アーティファクト

ステータスコード

コード説明
200成功
400リクエストが不正
413ファイルサイズが大きすぎる(> 300KB)
429レート制限超過
500サーバーエラー

レート制限

制限
1分あたりのリクエスト10回
1日あたりのリクエスト200回

レート制限を超えた場合、429 Too Many Requestsが返されます。

レスポンスヘッダー:

  • X-RateLimit-Minute-Limit: 1分あたりの制限
  • X-RateLimit-Minute-Remaining: 1分間の残り回数
  • X-RateLimit-Daily-Limit: 1日あたりの制限
  • X-RateLimit-Daily-Remaining: 1日の残り回数

エラーレスポンス

{
  "error": "エラータイプ",
  "message": "エラーメッセージ",
  "details": {
    "field": "問題のあるフィールド",
    "reason": "エラーの理由"
  }
}

サンプルコード

cURL

curl -X POST https://api.cbrief.dev/api/analyze \
  -H "Content-Type: application/json" \
  -d '{
    "languageHint": "javascript",
    "content": "function test() { eval(userInput); }",
    "save": false
  }'

JavaScript (fetch)

const response = await fetch('https://api.cbrief.dev/api/analyze', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    languageHint: 'javascript',
    content: 'function test() { eval(userInput); }',
    save: false,
  }),
});

const result = await response.json();
console.log(result);

Python (requests)

import requests

response = requests.post(
    'https://api.cbrief.dev/api/analyze',
    json={
        'languageHint': 'python',
        'content': 'import pickle\npickle.loads(user_data)',
        'save': False
    }
)

result = response.json()
print(result)

注意事項

  • API は現在開発中です。仕様は変更される可能性があります
  • 本番環境では認証が必要になる予定です
  • WebSocket APIも今後提供予定です