Consommer une API et afficher des films
Apprends à intégrer l’API TMDB, valider les données et afficher des films avec des composants réutilisables.
2 min read
Pourquoi ce module ?
Dans ce module, tu vas découvrir comment intégrer l’API The Movie Database (TMDB) dans une app Next.js 15 full-stack. Plutôt que de maintenir des données statiques, tu apprendras à récupérer dynamiquement la liste des films et des séries, à valider et typer les réponses, puis à les afficher via des composants React réutilisables.
Objectifs pédagogiques
- Se connecter à une API externe (TMDB) en toute sécurité
- Protéger ta clé d’API avec les variables d’environnement
- Effectuer des requêtes serveur à l’aide de React Server Components
- Valider et typer les données avec Zod pour éviter le
any
- Structurer le code dans
app/server
et séparer clairement logique client / serveur - Créer un composant
MovieCard
(etSerieCard
) 100 % réutilisable - Optimiser le rendu d’images avec le composant
next/image
- Gérer l’affichage conditionnel selon l’authentification
Prérequis
Avant de démarrer ce module, tu dois déjà avoir :
- Un projet Next.js 15 initialisé avec TypeScript
- Prisma configuré pour la partie base de données
- Un système d’authentification en place (module précédent)
- Une clé TMDB stockée dans
.env
sousTHEMOVIEDB_API_KEY
Aperçu des étapes
- Configuration de l’API TMDB
- Créer un fichier
app/server/movies.ts
- Implémenter une fonction
fetchMovieDb
pour centraliser les appels
- Créer un fichier
- Récupération et typage des films populaires
- Définir un schéma Zod (
GetMoviesSchema
) - Implémenter
getMovies()
etgetSeries()
- Définir un schéma Zod (
- Affichage des données
- Créer
MovieCard.tsx
etSerieCard.tsx
dansapp/components
- Utiliser
next/image
pour optimiser les affichages de posters
- Créer
- Composants réutilisables
- Paramétrer les props
movie
,serie
,action
etuser
- Afficher un bouton d’ajout à l’historique ou un lien vers la page de login
- Paramétrer les props
- Gestion des erreurs et UI
- Afficher un fallback (
Skeleton
) pendant le chargement - Gérer les cas où l’API renvoie un format inattendu
- Afficher un fallback (
app/server/movies.ts
1'use server'2import { z } from 'zod'3const GetMoviesSchema = z.object({4page: z.number(),5results: z.array(z.object({6id: z.number(),7title: z.string(),8poster_path: z.string(),9release_date: z.string(),10})),11})1213export async function getMovies() {14const res = await fetch(15`https://api.themoviedb.org/3/movie/popular`,16{ headers: { Authorization: `Bearer ${process.env.THEMOVIEDB_API_KEY}` } }17)18const data = await res.json()19const { results } = GetMoviesSchema.parse(data)20return results21}
Avec ce module, tu maîtriseras la chaîne complète : de la récupération sécurisée des données à leur affichage fluide et typé. Prêt·e à plonger ? Allez, c’est parti !
Dans cette leçon