chartbastan/_bmad-output/implementation-artifacts/9-1-créer-l-api-publique-avec-documentation-openapi.md
2026-02-01 09:31:38 +01:00

4.7 KiB

Story 9.1: Créer l'API publique avec documentation OpenAPI

Status: review

Acceptance Criteria

Given l'API publique est implémentée When je consulte /docs (Swagger UI) Then je vois la documentation complète de l'API And tous les endpoints sont documentés avec exemples And je peux tester les endpoints directement depuis la documentation

Given je fais une requête à l'API publique When j'utilise une clé API valide Then je reçois les données au format JSON And la réponse suit le format standardisé avec data et meta

Tasks / Subtasks

  • Créer l'endpoint /api/public (AC: #1)

    • Créer src/app/api/public/v1/ ou backend/app/api/public/v1/
    • Créer GET /api/public/v1/predictions (public)
    • Créer GET /api/public/v1/matches (public)
    • Limiter les données publiques (pas de données sensibles)
    • Documenter les endpoints
  • Créer le système d'authentification par clé API (AC: #2)

    • Créer src/services/apiKeyService.ts ou backend/app/services/apiKeyService.py
    • Créer la table api_keys dans Drizzle/SQLAlchemy
    • Créer la fonction generateApiKey(userId)
    • Créer la fonction validateApiKey(apiKey)
    • Implémenter le rate limiting différencié par clé API
  • Configurer la documentation Swagger UI (AC: #1)

    • Configurer FastAPI Swagger UI (/docs)
    • Ajouter les descriptions détaillées des endpoints
    • Ajouter les tags pour groupement logique
    • Ajouter les exemples de requêtes/réponses
    • Documenter les codes d'erreur (400, 401, 404, 500)
  • Créer les schémas OpenAPI (AC: #1)

    • Créer les schémas Pydantic pour les réponses
    • Utiliser OpenAPI 3.1
    • Définir les formats standardisés ({data, meta} et {error, meta})
    • Documenter tous les types
    • Générer la documentation automatique
  • Créer l'endpoint /openapi.json (AC: #1)

    • Créer GET /openapi.json pour exporter le schéma
    • Permettre aux développeurs tiers de récupérer le schéma
    • Valider que le schéma est complet
    • Documenter l'endpoint
  • Créer le dashboard pour développeurs (AC: #1)

    • Créer src/app/(developer)/dashboard/page.tsx
    • Afficher les statistiques d'utilisation de l'API
    • Afficher la clé API de l'utilisateur
    • Permettre de régénérer la clé API
    • Afficher la documentation OpenAPI
  • Créer les tests de l'API publique (AC: #1, #2)

    • Tester les endpoints publics
    • Tester la validation de clé API
    • Tester le rate limiting
    • Tester la documentation Swagger UI
    • Tester le format des réponses
  • Protéger l'API publique (AC: #1, #2)

    • Configurer CORS pour autoriser les requêtes externes
    • Configurer le rate limiting par clé API
    • Désactiver /docs en production (ou protéger)
    • Logger les requêtes d'API
    • Monitorer l'utilisation

Dev Notes

Stack Technique

  • API: FastAPI avec OpenAPI 3.1
  • Documentation: Swagger UI + Redoc
  • Auth: API Keys
  • Rate Limiting: Par clé API

File Structure

backend/app/
├── api/
│   ├── public/
│   │   └── v1/
│   │       ├── __init__.py
│   │       ├── predictions.py
│   │       └── matches.py
├── schemas/
│   └── public.py
└── services/
    └── apiKeyService.py

References

  • [Source: _bmad-output/planning-artifacts/epics.md#Story-9.1]

Dev Agent Record

Agent Model Used

GLM-4.7

Completion Notes List

  • API publique créée avec succès
  • Documentation OpenAPI implémentée
  • Système de clés API fonctionnel
  • Swagger UI configurée et documentée
  • Rate limiting différencié implémenté
  • Dashboard développeur créé
  • Tests écrits pour l'API publique

File List

  • backend/app/api/public/__init__.py
  • backend/app/api/public/v1/__init__.py
  • backend/app/api/public/v1/predictions.py
  • backend/app/api/public/v1/matches.py
  • backend/app/schemas/public.py
  • backend/app/services/apiKeyService.py
  • backend/app/models/api_key.py
  • backend/app/api/dependencies.py
  • backend/app/middleware/__init__.py
  • backend/app/middleware/rate_limiter.py
  • backend/alembic/versions/20260118_0008_create_api_keys_table.py
  • backend/tests/test_public_api.py
  • backend/tests/test_api_key_service.py
  • backend/tests/test_api_dependencies.py
  • chartbastan/src/app/(developer)/dashboard/page.tsx
  • backend/app/main.py (modifié pour inclure routes publiques et middleware)
  • backend/app/models/user.py (modifié pour ajouter relation api_keys)
  • backend/app/models/__init__.py (modifié pour exporter ApiKey)