APIリファレンス

ZentryのAPI仕様とエンドポイントの詳細説明です。

概要

ZentryのバックエンドAPIは、Next.js API Routesを使用して実装されています。 すべてのAPIエンドポイントは /api パスの下に配置されています。

技術スタック

  • • Next.js 16 API Routes
  • • Firebase Authentication(認証)
  • • Firebase Firestore(データベース)
  • • Firebase Storage(ファイルストレージ)
認証
APIリクエストの認証方法

すべてのAPIエンドポイントは、Firebase Authenticationトークンによる認証が必要です。

認証フロー

  1. 1. クライアント側でFirebase Authenticationでログイン
  2. 2. IDトークンを取得
  3. 3. リクエストヘッダーにトークンを含める
  4. 4. サーバー側でトークンを検証
// Firebase認証トークンの取得
import { getAuth } from 'firebase/auth';

const auth = getAuth();
const user = auth.currentUser;

if (user) {
  const token = await user.getIdToken();

  // APIリクエストにトークンを含める
  const response = await fetch('/api/endpoint', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${token}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ data })
  });
}

重要: トークンは定期的に有効期限が切れます。 有効期限切れの場合は、getIdToken(true) で新しいトークンを取得してください。

エンドポイント一覧
チャット API
会話とメッセージの管理
POST/api/chat/initiate

会話を作成、または既存の会話を取得

GET/api/chat/list

ユーザーの会話一覧を取得

GET/api/chat/conversation/[id]

特定の会話の詳細とメッセージを取得

スカウト API
スカウトの送信と管理
POST/api/scouts/send

学生にスカウトを送信

動画 API
動画の取得と管理
GET/api/videos

動画一覧を取得(フィルター、ページネーション対応)

GET/api/videos/[id]

特定の動画の詳細を取得

ユーザー API
ユーザー情報の取得と更新
GET/api/users/[id]

ユーザープロフィールを取得

PUT/api/users/[id]

ユーザープロフィールを更新

ライブ配信 API
ライブストリームの管理
POST/api/live-streams

新しいライブ配信を作成

GET/api/live-streams

ライブ配信一覧を取得

使用例
実際のAPIリクエスト例

会話の作成

// POST /api/chat/initiate
// 会話を作成または既存の会話を取得

const response = await fetch('/api/chat/initiate', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${token}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    otherUserId: 'user123'  // 会話相手のユーザーID
  })
});

const data = await response.json();
// { conversationId: 'conv123', created: true }

スカウトの送信

// POST /api/scouts/send
// スカウトを送信

const response = await fetch('/api/scouts/send', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${token}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    studentId: 'student123',
    type: 'message',  // 'like' | 'message' | 'special'
    message: 'あなたの動画を拝見しました...'  // オプション
  })
});

const data = await response.json();
// { scoutId: 'scout123', success: true }
エラーハンドリング

APIは標準的なHTTPステータスコードを返します。

200
Success

リクエストが正常に処理された

400
Bad Request

リクエストパラメータが不正

401
Unauthorized

認証が必要、またはトークンが無効

403
Forbidden

権限が不足している

404
Not Found

リソースが見つからない

500
Internal Server Error

サーバー側でエラーが発生

レート制限

APIのレート制限は現在実装されていませんが、将来的に導入予定です。

予定: ユーザーあたり1分間に60リクエストまで

APIファイルの場所

すべてのAPIエンドポイントは [app/api/](app/api/) ディレクトリ内にあります。

• [app/api/chat/](app/api/chat/) - チャットAPI

• [app/api/scouts/](app/api/scouts/) - スカウトAPI

• [app/api/videos/](app/api/videos/) - 動画API

• [app/api/users/](app/api/users/) - ユーザーAPI

• [app/api/live-streams/](app/api/live-streams/) - ライブ配信API