Bonjour,
-
Protobuf est un format de sérialisation de données (considère qu’il permet d’encoder n’importe quoi, comme JSON ou XML). Contrairement à JSON, le format n’est pas libre : pour faire du Protobuf, tu décris d’abord la structure de tes données (messages contenant des chaînes, nombres, booléens, octets ou d’autre messages) en utilisant un langage texte. Le langage texte est ensuite compilé vers du code de sérialisation/désérialisation dans le langage de ton choix (il y a des implémentations pour à peu près tous les langages). Ce code de sérialisation/désérialisation produit ensuite des messages sous formes binaires. Protobuf a été créé au début des années 2000 par Google (son plus gros utilisateur) qui voulait se passer de XML, et son but principal est la performance.
-
GraphQL est un format texte qui te permet, très grossièrement, de présenter l’équivalent d’un message JSON avec que les clefs (sans les valeurs) et éventuellement quelques filtres, et d’obtenir un message JSON construit en retour. D’un autre côté, la structure JSON de base qui peut être retournée par le serveur et lue par le client est définie avec un schéma texte muni de types. Il a été créé par Facebook qui voulait un moyen standard de retourner des choses par ses API et qui est son principal utilisateur.
-
Un webhook est simplement un endpoint HTTP fait pour recevoir des informations de la part d’applications externes, le plus souvent avec une requête POST munie d’un jeton d’authentification statique.
Pourriez vous donner un exemple imaginaire de service qui utiliserait conjointement Protobuf , GraphQL, et Webhook ?
Je suis Slack.
Je veux faire communiquer mon client bureau avec mon serveur mais je veux gagner du temps de sérialisation et de la bande passante, ou alors l’aspect déstructuré et dynamiquement typé de JSON ne me plaît pas. Je vais faire communiquer mon client bureau et mon serveur avec Protobuf.
Je veux ouvrir une API qui permet aux développeurs externes qui permet de requêter des profils avec un maximum de données de retour possibles, en filtrant éventuellement certaines données façon LDAP, et donner une possibilité d’alléger les réponses. Je suis dans une réalité alternative où Slack a été racheté par Facebook, plutôt que de faire du REST avec de l’OAuth comme tout le monde, je vais faire du GraphQL.
Je veux fournir une API qui permette aux développeurs externes d’être notifié quand un message important tombe sur un canal, par exemple si un filtre à mots-clefs prévenant quand le cours du sneaker a chuté s’est déclenché. Les développeurs externes pourront fournir une URL correspondant à un endpoint sur leur serveur, qui recevra une notification POST/JSON quand le filtre se sera mis en marche : ce sera un webhook sortant.
Je veux fournir une API qui permette aux développeurs de faire un bot qui postera occasionnellement un message quelque part. Les développeurs externes pourront envoyer à une URL présente sur mes serveurs contenant le message que leur souhaite envoyer, cela en envoyant une requête POST/JSON : ce sera un webhook entrant.
Bonne journée,