TP

imt

1. Description

Nous allons concevoir une petite application permettant de gérer une salle de cinéma, et les réservations des utilisateurs.

Il s’agit d’une application jouet et peu réaliste. Cette application est composée de 4 micro-services :

  • Movie est le micro-service responsable de la gestion des films du cinéma. Il contient et gère une petite base de données json contenant la liste des films disponibles avec quelques informations sur les films.

  • Schedule est le micro-service responsable des jours de passage des films dans le cinéma. Il contient et gère une petite base de données json contenant la liste des dates avec l’ensemble des films disponibles à cette date.

  • Booking est le micro-service responsable de la réservation des films par les utilisateurs. Il contient et gère une petite base de données json contenant une entrée par utilisateur avec la liste des dates et films réservés. Booking fait appel à Schedule pour connaître et vérifier que les créneaux réservés existent bien puisqu’il ne connait pas lui-même les créneaux des films.

  • User est le micro-service est le micro-service qui servirait typiquement à authentifier les utilisateurs. Il contient et gère une petite base de données json avec la liste des utilisateurs.

Le repo de base pour faire ce TP se trouve ici : https://github.com/IMTA-FIL/UE-AD-A1-REST

2. Tout en REST !

tp rest

Dans un premier temps et pour y aller pas à pas, il peut être une bonne idée de coder tous les services avec une API REST dans un premier temps. Pour aller plus vite et passer plus rapidement à GraphQL, vous pouvez ne coder qu’une partie des routes REST pour Movie et Booking.

  1. Coder chacun des services pour permettre tout simplement d’accéder, d’ajouter ou de supprimer des éléments de leur petite base de données json (CRUD). Pas d’update nécessaire sur Booking et Schedule.

    • Certains points d’entrée ont besoin d’intéragir avec d’autres services, par exemple à l’ajout d’une réservation le service Booking doit vérifier auprès de Schedule que la date réservée pour le film est correcte (d’où la flèche de Booking vers Schedule).

    • Soyez logique ! par exemple, il ne parait pas adapté de pouvoir accéder à toutes les réservations de tous les utilisateurs si on n’est pas admin.

  2. Écrire les documentations OpenAPI associées à vos services avec des exemples et avec la description des données en entrée et en sortie.

Important
Pour coder Booking vous aurez besoin d’appeler d’autres services par le biais de leur API REST. Pour cela, vous utiliserez le paquet requests (déjà présent dans requirements.txt) et utilisez la fonction get (ou post). Voir ici

3. GraphQL

tp hackaton

Le but de ce TP est de venir remplacer les APIs de Movie et Booking par des API GraphQL et de modifier en conséquence les appels faits par Booking et le mock du frontend.

  1. Terminer la réécriture du service Movie en GraphQL et le tester

  2. Modifier le service Booking pour faire des requêtes GraphQL et non plus REST sur Movie

  3. Réécrivez le service Booking en GraphQL et le tester

Tip
A noter qu’une requête GraphQL est une simple requête HTTP/1.1 avec la méthode POST. Vous pouvez donc appeler le service Movie en utilisant la méthode requests.post. Attention touefois une subtilité est présente pour envoyer le body de la requête GraphQL response = requests.post("http://movie:3200/graphql",json={'query': query}).