APIリファレンス
ZentryのAPI仕様とエンドポイントの詳細説明です。
ZentryのバックエンドAPIは、Next.js API Routesを使用して実装されています。 すべてのAPIエンドポイントは /api パスの下に配置されています。
技術スタック
- • Next.js 16 API Routes
- • Firebase Authentication(認証)
- • Firebase Firestore(データベース)
- • Firebase Storage(ファイルストレージ)
すべてのAPIエンドポイントは、Firebase Authenticationトークンによる認証が必要です。
認証フロー
- 1. クライアント側でFirebase Authenticationでログイン
- 2. IDトークンを取得
- 3. リクエストヘッダーにトークンを含める
- 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/chat/initiate会話を作成、または既存の会話を取得
/api/chat/listユーザーの会話一覧を取得
/api/chat/conversation/[id]特定の会話の詳細とメッセージを取得
/api/scouts/send学生にスカウトを送信
/api/videos動画一覧を取得(フィルター、ページネーション対応)
/api/videos/[id]特定の動画の詳細を取得
/api/users/[id]ユーザープロフィールを取得
/api/users/[id]ユーザープロフィールを更新
/api/live-streams新しいライブ配信を作成
/api/live-streamsライブ配信一覧を取得
会話の作成
// 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ステータスコードを返します。
Success
リクエストが正常に処理された
Bad Request
リクエストパラメータが不正
Unauthorized
認証が必要、またはトークンが無効
Forbidden
権限が不足している
Not Found
リソースが見つからない
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