Upgrade to Pro — share decks privately, control downloads, hide ads and more …

API Web Moderne avec gRPC

API Web Moderne avec gRPC

La plupart des projets logiciels utilisent ou exposent des Api Web. Ces APIs sont souvent bâties sur des standards ( HTTP 1.X / JSON / XML ….) qui n’ont pas évolué depuis plusieurs années. Je vous propose de découvrir une approche plus moderne avec le framework GRPC conçu par Google.

Avatar for Florian Bernard

Florian Bernard

October 10, 2019

Other Decks in Programming

Transcript

  1. Constat Application Programming Interface Web • Quasiment tous les projets

    utilisent une API Web • Utilisation de REpresentational State Transfer : HTTP (1.0 1996) + Json (2000) • Centré sur les ressources (Create Read Update Delete ) • Spécifications récentes (Swagger / OpenAPI) • Développement et maintenance du code pour chaque plateforme (Android, iOS, Web ...)
  2. 1991 - Corba • Common Object Request Broker Architecture •

    Object Management Group : Oracle, Sun, IBM … • Utilisation d’un “Interface Description Language” et génération de code • 1995: v2 protocole Internet Inter-ORB Protocol (basé sur TCP/IP) • 2012: v3.3 (dernière version)
  3. 1997 - Java RMI • Remote Method Invocation • Java

    version 1.1 • Protocole Java Remote Method Protocol (basé sur TCP/IP) • Compatible avec corba (RMI-IIOP) • Utilisation d’une “registry” et des interfaces JAVA
  4. 1998 - SOAP • Simple Object Access Protocol • Basé

    sur le format XML + transport-agnostique (HTTP, SMTP, FTP …) • 2003: v1.2 Recommandé par le W3C • Utilisation d’un contrat de service (Web Services Description Language ) • Annuaire Universal Description Discovery and Integration
  5. 2000 - REST • REpresentational State Transfer • Basé sur

    le protocole HTTP (Post, Get, Put, Patch, Head, Delete ...) • Format-agnostique (JSON, XML, CSV) • 2010: Création d’une spécification (SWAGGER) • 2015: création de l'Open Api initiative (SmartBear, Google, IBM) et de l’OpenApi Specification (v3 2017)
  6. 2015 - gRPC • gRPC Remote Procedure Call • Version

    Open source de Stubby ( utilisé en interne) • HTTP/2.0 pour le transport. • Protocol Buffer : description des interfaces et format des données • Streaming client, serveur et bidirectionnel • Supporte de nombreux langages (Java, Javascript, Go, C++, Dart...)
  7. HTTP 2 • Issu du protocole SPDY créé par Google

    • Garde les concepts de HTTP 1.x (Headers, Methods, URIs, Status codes) • Transport des données en binaire (framing) • Multiplexing et pipelining des requêtes • Server Push • Compression des Headers
  8. Protocol Buffers • Format de sérialisation créé par Google en

    2001 • Utilisation d’un “Interface Description Language” et d’un générateur de code • Représentation des données au format binaire • Message compacte, sérialisation et désérialisation performantes • Gère de nombreux types ( double, int, float, string, bytes ...-) • Libre et Open Source
  9. GRPC Web • HTTP/2 “framing” n’est pas directement exposé côté

    navigateur • Protocol Spécifique basé sur HTTP et/ou Websocket • Mode grpctext: encodage base64 et streaming serveur • Mode grpcweb: utilisation de protobuf mais pas de streaming • Utilisation d’un “Proxy” ( Envoy, GrpcWebProxy …)
  10. Alternatives • Apache Thrift : https://thrift.apache.org/ ( Facebook ) •

    Cap’n Proto : https://capnproto.org/ • RSocket : http://rsocket.io/