Créer des applications client-serveur avec gRPC

gRPC est un framework RPC moderne, Open Source et hautes performances qui peut s'exécuter dans n'importe quel environnement. Il peut connecter efficacement les services dans et entre les centres de données grâce à une compatibilité connectable pour l'équilibrage de charge, le traçage, la vérification de l'état et l'authentification. Il est également possible de connecter des appareils, des applications mobiles et des navigateurs à des services de backend lors du dernier kilomètre de l'informatique distribuée. Vous pouvez trouver la documentation sur le site Web officiel de gRPC et obtenir de l'aide auprès des communautés Open Source. Ce guide vous présente des solutions permettant de créer des applications Android à l'aide de gRPC.

grpc.io est le site Web officiel du projet gRPC. Pour en savoir plus sur le fonctionnement de gRPC, consultez la page Qu'est-ce que gRPC ? et Concepts gRPC. Pour apprendre à utiliser gRPC dans une application Android, consultez l'exemple "Hello World" du guide de démarrage rapide de gRPC Android pour Java. Vous trouverez également plusieurs autres exemples gRPC pour Android sur GitHub.

Fonctionnalités

L'appel de procédure simplifie les choses
Comme il s'agit d'un RPC, le modèle de programmation est constitué d'appels de procédure: l'aspect réseau de la technologie est extrait du code d'application, ce qui donne l'impression qu'il s'agit d'un appel de fonction en cours de traitement normal. Votre interaction client-serveur ne sera pas limitée par la sémantique des méthodes de ressources HTTP (telles que GET, PUT, POST et DELETE). Par rapport aux API REST, votre implémentation semble plus naturelle, sans qu'il soit nécessaire de gérer les métadonnées du protocole HTTP.
Transmission réseau efficace avec HTTP/2
La transmission de données depuis des appareils mobiles vers un serveur backend peut représenter un processus très gourmand en ressources. Grâce au protocole HTTP/1.1 standard, les connexions fréquentes d'un appareil mobile à un service cloud peuvent décharger la batterie, augmenter la latence et empêcher d'autres applications de se connecter. Par défaut, gRPC s'exécute sur HTTP/2, qui introduit le streaming bidirectionnel, le contrôle de flux, la compression des en-têtes et la possibilité de multiplexer les requêtes sur une seule connexion TCP/IP. gRPC peut ainsi réduire l'utilisation des ressources, ce qui réduit les temps de réponse entre votre application et les services exécutés dans le cloud, l'utilisation du réseau et l'autonomie de la batterie pour les clients s'exécutant sur des appareils mobiles.
Prise en charge intégrée de l'échange de données en flux continu
gRPC a été conçu en pensant dès le départ à la compatibilité de HTTP/2 avec le streaming bidirectionnel full-duplex. Le streaming permet à une requête et à une réponse d'avoir une taille arbitrairement élevée, telles que les opérations nécessitant l'importation ou le téléchargement d'une grande quantité d'informations. Avec le streaming, le client et le serveur peuvent lire et écrire des messages simultanément, et s'abonner les uns aux autres sans suivre les ID de ressource. Cela rend l'implémentation de votre application plus flexible.
Intégration parfaite au tampon de protocole
gRPC utilise les tampons de protocole (Protobuf) comme méthode de sérialisation/désérialisation avec le plug-in de génération de code optimisé pour Android (Protobuf Java Lite). Par rapport au format texte (tel que JSON), Protobuf offre un échange de données plus efficace en termes de vitesse de marshaling et de taille de code, ce qui le rend plus adapté à une utilisation dans les environnements mobiles. De plus, la syntaxe concise des messages et des définitions de service de Protobuf facilite la définition du modèle de données et des protocoles d'application pour votre application.

Présentation de l'utilisation

Suite au tutoriel gRPC Basics - Android Java (Principes de base de gRPC – Java pour Android), l'utilisation de gRPC pour les applications Android comporte quatre étapes:

  • Définir les services RPC avec des tampons de protocole et générer les interfaces client gRPC.
  • Créer un canal servant de support pour les appels RPC entre le client et le serveur
  • Créez un stub client comme point d'entrée pour lancer des appels RPC côté client.
  • Effectuez des appels RPC sur le serveur distant comme vous le feriez pour des appels de procédure locale.

À des fins de démonstration, les octets sont transmis en texte brut dans l'exemple fourni. Cependant, votre application doit toujours chiffrer les données réseau en production. gRPC prend en charge le chiffrement SSL/TLS, ainsi que l'échange de jetons OAuth (OAuth2 avec les services Google) pour l'authentification. Pour en savoir plus, consultez TLS sur Android et Utiliser OAuth2.

Transport

gRPC propose deux implémentations de Transport pour les clients Android : OkHttp et Cronet.

Choisir un mode de transport (avancé)

  • OkHttp
    OkHttp est une pile réseau légère conçue pour être utilisée sur mobile. Il s'agit du transport gRPC par défaut pour l'exécution dans l'environnement Android. Pour utiliser OkHttp comme transport gRPC pour votre application, créez le canal avec AndroidChannelBuilder, qui encapsule OkHttpChannelBuilder et enregistre un moniteur réseau auprès de l'OS Android pour répondre rapidement aux modifications du réseau. Vous trouverez un exemple d'utilisation dans gRPC-Java AndroidChannelBuilder.
  • Cronet (expérimental)
    Cronet est la pile réseau de Chromium présentée sous la forme d'une bibliothèque pour mobile. Il offre une compatibilité réseau fiable avec un protocole QUIC de pointe, ce qui peut être particulièrement efficace dans les environnements réseau peu fiables. Pour en savoir plus sur Cronet, consultez la page Effectuer des opérations réseau à l'aide de Cronet. Pour utiliser Cronet comme transport gRPC pour votre application, créez le canal avec CronetChannelBuilder. Vous trouverez un exemple d'utilisation dans la section gRPC-Java Cronet Transport.

En règle générale, nous recommandons aux applications ciblant les versions récentes du SDK d'utiliser Cronet, car cette solution offre une pile réseau plus puissante. L'inconvénient de l'utilisation de Cronet est l'augmentation de la taille de l'APK, car l'ajout de la dépendance binaire Cronet ajoutera plus de 1 Mo à la taille de l'application, contre environ 100 Ko pour OkHttp. À partir de GMSCore v.10, une copie à jour de Cronet peut être chargée à partir des services Google Play. La taille de l'APK n'est peut-être plus un problème, même si les appareils sur lesquels la dernière version de GMSCore n'est pas installée peuvent continuer à utiliser OkHttp.