TP gRPC

imt

Le but de ce TP est de construire le même ensemble de services que dans le TP REST, à savoir : Movie, Booking, Times et User. Cette fois certaines API seront écrites en gRPC.

1. TP vert

grpc1

Important
Toute modification de l’API gRPC (fichier proto) nécessite une recompilation du fichier proto concerné et une mise à jour des fichiers générés côté serveur ET côté client !
Tip
Pour tester au fur et à mesure vous pouvez éventuellement créer un client test pour chaque service.

Voici les étapes à suivre pour ce TP :

  1. Terminer l’écriture du service Movie en utilisant gRPC

  2. Reprenez votre service REST User, remplacez-y les requêtes REST vers Movie par des appels de procédures distantes en utilisant les stub associés. En effet, User devient un client gRPC et reste un serveur REST dans ce TP.

  3. Écrivez les fichiers d’API proto pour le service Times

  4. Écrivez le code du service Times et testez ce code

  5. Reprenez votre service REST Booking, remplacez-y les requêtes REST vers Times par des appels de procédures distantes en utilisant les stub associés. En effet, Booking devient un client gRPC et reste un serveur REST dans ce TP.

Tip
Vous pourrez aussi avoir besoin d’inclure from google.protobuf.json_format import MessageToJson pour utiliser la fonction MessageToJson permettant de transformer une réponse gRPC en format JSON.

2. TP bleu

Vous allez ici remplacer l’API de Booking par une API gRPC.

grpc2

Important
Booking est à la fois un Service et un client en gRPC. User est aussi à la fois un service et un client mais son service offre une API REST.

Écrivez le code du service Booking et testez ce code (qui doit appeler le service Times en utilisant le stub correspondant).

Tip
Pour le service Booking vous aurez besoin de Nested types pour les messages Protocol Buffers, voir https://developers.google.com/protocol-buffers/docs/proto#nested

3. TP rouge

Allez plus loin dans l’utilisation de gRPC en utilisant les appels asynchones des procédures distantes et l’utilisation de futures. Vérifiez que les appels asynchrones fonctionnent bien.

Tip
voir la documentation https://grpc.github.io/grpc/python/