Aller au contenu principal

Partie I : Consommation des API

Guide complet pour developpeurs - Comment consommer efficacement l'API MyTelevision v2.0


Table des matieres

  1. Documentation Swagger/OpenAPI
  2. Authentification & Securite
  3. Bonnes pratiques de consommation d'API

1. Documentation Swagger/OpenAPI

1.1 Comment acceder a Swagger

URLs d'acces

La documentation interactive Swagger/OpenAPI est accessible aux URLs suivantes :

EnvironnementURL
Local (developpement)http://localhost:3000/api/docs
Staginghttps://staging-api.mytelevision.app/api/docs
Productionhttps://api.mytelevision.app/api/docs

Interface Swagger UI

L'interface Swagger UI offre une documentation interactive complete de l'API avec les fonctionnalites suivantes :

  1. Try it out : Testez directement les endpoints depuis le navigateur

    • Cliquez sur un endpoint puis "Try it out", remplissez les parametres, puis "Execute"
    • Visualisez la requete curl generee et la reponse en temps reel
  2. Models/Schemas : Documentation complete des structures de donnees

    • Schemas de requete (DTOs d'entree)
    • Schemas de reponse (formats de retour)
    • Validation des champs et contraintes
  3. Authorize : Authentification centralisee

    • Bouton "Authorize" en haut a droite
    • Entrez votre token JWT : Bearer <votre_access_token>
    • Le token est automatiquement ajoute a toutes les requetes
  4. Fonctionnalites avancees :

    • Filter : Recherche rapide d'endpoints par mot-cle
    • Display duration : Temps de reponse affiche pour chaque requete
    • Syntax highlighting : Coloration syntaxique JSON (theme Monokai)
    • Persist authorization : Le token reste en memoire lors de la navigation

1.2 Structure generale

L'API MyTelevision suit une architecture organisee par tags (modules fonctionnels) avec une separation claire entre les endpoints publics (Client) et administratifs (Admin).

Les endpoints sont regroupes en 41 controleurs organises en 2 categories principales :

Endpoints Client (API publique /api/v2/...)

Accessibles aux applications front-end et mobiles. Authentification JWT requise pour la plupart (sauf /auth/* et /health/*).

Endpoints Admin (Panel d'administration /api/v2/admin/...)

Accessibles uniquement aux utilisateurs avec roles ADMIN, MODERATOR ou SUPER_ADMIN. Authentification JWT obligatoire.

1.3 Organisation des modules

Modules Client (22 controleurs)

TagDescriptionEndpoints cles
AuthAuthentication - Login, Register, Password reset, Token refreshPOST /auth/login, POST /auth/register, GET /auth/me
UsersUser management - Profile, Devices, SessionsGET /users/profile, PUT /users/profile
MoviesMovies - Browse, Search, Featured, Top 10, DetailsGET /movies, GET /movies/{id}, GET /movies/featured
SeriesTV Series - Seasons, Episodes, Browse, SearchGET /series, GET /series/{id}/seasons
Live TVLive TV channels - Browse by category, Featured channelsGET /livetv/channels, GET /livetv/categories
RadioRadio stations - Browse, Featured, CategoriesGET /radio/channels, GET /radio/featured
PodcastsPodcasts - Collections, Episodes, CategoriesGET /podcasts, GET /podcasts/{id}/episodes
Live EventsLive events and sports - Upcoming, Live nowGET /live-events, GET /live-events/live-now
NewsNews articles - Browse, Categories, RecentGET /news, GET /news/recent
CatalogGenres and Categories - Browse content taxonomyGET /catalog/genres, GET /catalog/categories
FavoritesUser favorites - Add, Remove, List by media typePOST /favorites, GET /favorites, DELETE /favorites/{id}
Watch HistoryUser watch history - Track progress, Resume playbackPOST /watch-history, GET /watch-history
NotificationsPush notifications - List, Mark read, DeleteGET /notifications, PUT /notifications/{id}/read
SupportSupport tickets - Create, Reply, View statusPOST /support/tickets, GET /support/tickets
SettingsApplication settings - Public configurationGET /settings
SlidersPromotional sliders - Homepage bannersGET /sliders
BannersAdvertising banners - Display adsGET /banners
Subscription PlansSubscription plans - Pricing, FeaturesGET /subscription-plans
CountriesCountries reference dataGET /countries
LanguagesLanguages reference dataGET /languages
StreamingStreaming security - Token generation, Signed URLs, DRMPOST /streaming/generate-token
HealthHealth check endpoints - API status, Database, RedisGET /health, GET /health/live, GET /health/ready

Modules Admin (19 controleurs)

TagDescriptionEndpoints cles
Admin - AuthenticationAdmin authentication - Login, SessionsPOST /admin/auth/login, GET /admin/auth/me
Admin - UsersAdmin user management - CRUD, Roles, StatusGET /admin/users, PUT /admin/users/{id}/role
Admin - MoviesAdmin movies management - CRUD, TMDb auto-fillPOST /admin/movies, POST /admin/movies/tmdb/import
Admin - SeriesAdmin series management - CRUD, Seasons, EpisodesPOST /admin/series, POST /admin/series/{id}/seasons
Admin - Live TVAdmin Live TV management - Channels, CategoriesPOST /admin/livetv/channels
Admin - RadioAdmin radio management - Channels, CategoriesPOST /admin/radio/channels
Admin - PodcastsAdmin podcasts management - Collections, Episodes, PodcastersPOST /admin/podcasts
Admin - Live EventsAdmin live events management - CRUD, CategoriesPOST /admin/live-events
Admin - NewsAdmin news management - Articles, CategoriesPOST /admin/news
Admin - CatalogAdmin catalog management - Genres, CategoriesPOST /admin/catalog/genres
Admin - SettingsAdmin settings management - All configuration groupsPUT /admin/settings/{key}
Admin - SlidersAdmin sliders management - CRUD, SchedulingPOST /admin/sliders
Admin - BannersAdmin banners management - CRUD, AnalyticsPOST /admin/banners
Admin - Subscription PlansAdmin subscription plans management - CRUDPOST /admin/subscription-plans
Admin - RBACRole-Based Access Control - Roles, PermissionsGET /admin/rbac/roles
Admin - SupportAdmin support management - Tickets, ReplyGET /admin/support/tickets
Admin - NotificationsAdmin notifications - Broadcast, Send, SchedulePOST /admin/notifications/broadcast
Admin - CountriesAdmin countries managementPOST /admin/countries
Admin - LanguagesAdmin languages managementPOST /admin/languages

2. Authentification & Securite

2.1 JWT - Tokens d'acces

Flux d'authentification

Durees de validite

TokenDureeRenouvellement
Access Token1 heureVia refresh token
Refresh Token7 joursRotation automatique

Exemple de login

# Login
curl -X POST https://api.mytelevision.app/api/v2/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "[email protected]",
"password": "SecurePass123"
}'

# Reponse
{
"tokens": {
"accessToken": "eyJhbGciOiJIUzI1NiIs...",
"refreshToken": "eyJhbGciOiJIUzI1NiIs..."
},
"user": {
"id": "uuid",
"email": "[email protected]",
"role": "USER"
}
}

Refresh Token

curl -X POST https://api.mytelevision.app/api/v2/auth/refresh \
-H "Content-Type: application/json" \
-d '{"refreshToken": "eyJhbGciOiJIUzI1NiIs..."}'

2.2 Sessions utilisateur

  • Chaque login cree une session unique liee a l'appareil
  • Utilisez le header X-Device-Id pour identifier l'appareil client
  • Les sessions peuvent etre listees et revoquees individuellement
# Lister les sessions actives
curl -X GET https://api.mytelevision.app/api/v2/auth/sessions \
-H "Authorization: Bearer $TOKEN"

# Revoquer une session
curl -X DELETE https://api.mytelevision.app/api/v2/auth/sessions/{sessionId} \
-H "Authorization: Bearer $TOKEN"

2.3 RBAC - Roles et Permissions

Hierarchie des roles

SUPER_ADMIN > ADMIN > MODERATOR > USER
| | | |
| | | +-- Lecture contenu, favoris, historique
| | +-- + Moderation contenu (CRUD partiel)
| +-- + Gestion utilisateurs, settings
+-- + Tous les droits, RBAC, logs systeme

Acces aux endpoints

RoleEndpoints ClientEndpoints Admin
USERTousAucun
MODERATORTousCRUD contenu partiel
ADMINTousTous sauf RBAC
SUPER_ADMINTousTous

2.4 Streaming Security

# 1. Generer un token de streaming
curl -X POST https://api.mytelevision.app/api/v2/streaming/generate-token \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"contentId": "movie-uuid", "mediaType": "MOVIE"}'

# Reponse
{
"streamToken": "st_abc123...",
"streamUrl": "https://cdn.../movie.m3u8?token=st_abc123...",
"expiresAt": "2025-01-15T11:00:00Z"
}
MecanismeDescription
Token bindingToken lie a l'IP du client et au referer
ExpirationTTL configurable (defaut: 1h)
Usage limitNombre d'utilisations max (defaut: 1)
DRM AES-128Chiffrement des flux HLS
Anti-hotlinkValidation du referer HTTP

2.5 Erreurs frequentes et resolutions

CodeErreurCauseResolution
401UnauthorizedToken expire ou invalideRefresher le token
403ForbiddenPermission insuffisanteVerifier le role utilisateur
429Too Many RequestsRate limit depasseAttendre et reessayer avec backoff

2.6 Bonnes pratiques de securite

  1. Ne jamais exposer les tokens dans les URLs ou logs
  2. Implementer l'auto-refresh des tokens cote client
  3. Stocker les tokens en memoire ou secure storage (pas localStorage)
  4. Utiliser HTTPS pour toutes les requetes en staging/production
  5. Gerer la deconnexion en revoquant la session cote serveur
  6. Implementer le retry avec backoff exponentiel pour les 429

3. Bonnes pratiques de consommation d'API

3.1 Pagination standardisee

Toutes les listes paginees utilisent le meme format :

{
"data": [...],
"meta": {
"total": 150,
"page": 1,
"limit": 20,
"totalPages": 8,
"hasNextPage": true,
"hasPreviousPage": false
}
}

Parametres de pagination :

  • page : Numero de page (defaut: 1)
  • limit : Elements par page (defaut: 20, max: 100)

3.2 Format d'erreur standardise

{
"statusCode": 400,
"message": "Validation failed",
"error": "Bad Request",
"details": [
{
"field": "email",
"message": "email must be a valid email address"
}
]
}

3.3 Internationalisation

L'API supporte deux locales :

LocaleLangueDefaut
fr_FRFrancais (France)Oui
en_USEnglish (United States)Non

Detection de la locale (par priorite) :

  1. Query Parameter : ?lang=en_US
  2. Header : Accept-Language: en-US,en;q=0.9,fr;q=0.8
  3. Defaut : fr_FR

3.4 Optimisation et performance

  • Cache Redis : Les reponses GET sont cachees (TTL 5 minutes)
  • Compression gzip : Envoyez Accept-Encoding: gzip
  • Pagination : Ne demandez que les donnees necessaires
  • Filtres : Utilisez les query params pour filtrer cote serveur

3.5 Checklist developpeur

Avant d'integrer l'API

  • Lire la documentation Swagger (/api/docs)
  • Configurer les variables d'environnement
  • Tester GET /health pour verifier la connectivite
  • Implementer le flux d'authentification JWT
  • Mettre en place l'auto-refresh des tokens
  • Gerer les erreurs (401, 403, 429, 500)

Avant la mise en production

  • Utiliser les URLs de production (https://api.mytelevision.app)
  • Verifier que HTTPS est utilise partout
  • Implementer le rate limiting cote client
  • Tester la gestion des erreurs reseau
  • Valider les schemas de reponse

Changelog

VersionDateModifications
1.0.02025-12-12Version initiale Partie I

Derniere mise a jour : 12 decembre 2025 Auteurs : Equipe MyTelevision + Claude Code AI