Semaine 4

Cette semaine nous allons ajouter une fonctionnalité pour que nos utilisateurs puissent ajouter des vrais films à leurs favoris.

Pour cela nous allons utiliser une API externe pour récupérer des informations sur des films.

Ces films seront stockés dans la table Films.

Requête HTTP

Je vous invite a lire la partie sur les requêtes HTTP dans le cours Ici Ainsi que la partie sur le JSON Ici

Le JSON c'est bien mais à quoi ca va nous servir ? Le JSON est devenu le format le plus commun pour que deux applications qui ne se connaisse pas puissent s'échanger facilement des données.

Dès que notre service va renvoyer une réponse, elle sera en JSON.

Notre service va lui même aller faire des appels a un autre service disponible a tous sur internet.

Requeter des films et serie

Pour que notre utilisateur puisse ajouter des films à ses favoris, il nous faut une liste de film. La création d'une telle liste étant une tâche longue et peu intéressante, nous utiliserons une API externe.

Le site https://www.omdbapi.com fourni une API pour chercher des films par nom.

Obtenir une clé d'API

Pour faire des requête le site vous demandera une clé d'API pour vous authentifier, vous pouvez en obtenir une gratuitement via ce lien : https://www.omdbapi.com/apikey.aspx Cochez FREE, mettez votre mail puis Submit. Une fois le mail reçu, cliquez sur le lien d'activation et attendez 10 minutes que cela soit effectif.

Voici un lien d'exemple avec ma clé d'API pour rechercher ce qui est objectivement la meilleur trilogie existante https://www.omdbapi.com/?s=lord of the rings&page=1&type=movie&apikey=414e8ea4

Il est important de ne pas stocker de clé d'API dans le code source, vous devrez la stocker dans un fichier de configuration. cf [Configuration](../webapi/configuration.md)

Intégration de l'API dans un service

Vous allez intégrer cet API dans votre projet.

Ceci est un exemple d'utilisation d'une API externe, il est important de ne pas abuser des requêtes pour ne pas surcharger les serveurs.

Pour cela vous allez créer une classe OmdbService dans le dossier Services qui aura une méthode SearchByTitle qui prendra en paramètre un string title et renverra une liste de film.

Vous créer ensuite une autre méthode GetByImdbId qui prendra en paramètre un string imdbId et renverra un film.

Vous utiliserez la classe HttpClient pour faire des requêtes HTTP. Allez voir le cours sur l'injection de dépendance pour savoir comment l'injecter Ici Aller également voir le cours sur les requêtes HTTP pour savoir comment les utiliser Ici Et enfin le cours sur le JSON pour savoir comment traiter les réponses Ici

N'oubliez pas de gérer les erreurs et de renvoyer un code d'erreur si la requête n'a pas pu être effectuée. Documentation

Nouvelles classes

Les réponses OMDB sont en JSON, vous devrez donc créer des classes pour désérialiser ces réponses.

Il faudra créer 4 classes:

  • OmdbSearchResponse
  • OmdbFilm
  • OmdbFilmDetail
  • OmdbFilmRating

OmdbSearchResponse contiendra une liste de OmdbFilm et OmdbFilm contiendra les informations d'un film. OmdbFilmDetail contiendra les informations détaillées d'un film et les ratings au format OmdbFilmRating.

Il est possible de générer ces classes automatiquement via Visual Studio ou un site comme json2csharp
Pour typer les champs qui sont des listes, vous pouvez utiliser List<T> ou IEnumerable<T>, le second étant plus générique.
Conservez bien les même noms de propriétés que dans le JSON pour que la désérialisation fonctionne.

Controlleur OMDB

Vous allez créer un controlleur Omdb.

Celui-ci devra utiliser le service OmdbService pour faire des recherches de films.

Ce controlleur fournira les routes suivantes:

GET /api/Omdb/search/{title} // Renvoi les films correspondant au titre
GET /api/Omdb/import/{imdbId} // Recherche un film par son id IMDB, l'ajoute à la BDD puis le retourne

Injection de dépendance

Pour utiliser OmdbService dans votre controlleur vous devrez l'injecter via l'injection de dépendance.

Pour cela vous pourrez utiliser la méthode AddSingleton cf cours Ici

Bonus

Ajouter les champs Plot et Released dans la table Film et remplissez les lors de l'import.

Ajoutez un champ Rating dans la table Film pour stocker la note "Rotten Tomatoes" du film qui est renvoyer dans la recherche par imdbId. Puis stocker cette valeur lors de l'import.