gRPC bringt Tempo in die API

Im Web schieben wir Daten in diversen Formaten hin und her. Die meisten sind textbasiert, z.B. XML oder JSON. gRPC von Google setzt auf einen anderen Weg: Es codiert übertragene Daten binär. Das ist für Menschen nicht ohne Hilfsprogramme entschlüsselbar, für Computer aber naheliegend – und verringert die übertragene Datenmenge.

Warum gRPC?

gRPC ist eine Alternative zu REST oder GraphQL, die sich anbietet, wenn Performance entscheidend ist. Ein typisches Einsatzgebiet ist Kommunikation zwischen Microservices. Aber auch für eine API ist gRPC bestens geeignet, gerade bei vielen Clients. Hier punktet gRPC damit, dass der Client-Service zum Datenaustausch ohne Zusatzaufwand generiert werden kann.

Highlights:

  • Top Speed: Dank HTTP/2 verkürzen sich die Antwortzeiten. Streaming beschleunigt bei grösseren Datenmengen wie z.B. hochaufgelösten Bildern die Übertragung erheblich.
  • Contract based: Die Schnittstellen-Definition wird in einem Datenmodell festgehalten, das Client und Server erfüllen müssen. Services und Types können daraus generiert werden, was Zeit spart und Fehler minimiert.
  • Pattformunabhängig: gRPC schafft keine unnötigen Abhängigkeiten, da es keine bestimmte Programmiersprache oder Plattform voraussetzt.

Maximale Performance durch HTTP/2 und Protobuf

Performance hat oberste Priorität. Das wird vor allem durch zwei grundlegende Techniken ermöglicht, auf denen gRPC aufbaut:

HTTP/2

gRPC nutzt die Vorteile von HTTP/2, der Weiterentwicklung des Protokolls zur Datenübertragung im Web. Es erlaubt binär codierte Inhalte und vereinfacht die Bündelung von Datenpaketen. HTTP/2 ist in allen modernen Browsern bereits eingebaut.

Protobuf

gRPC setzt auf das binäre Datenformat Protobuf, mit vollem Namen Protocol Buffers. Binäre Daten sind verglichen mit durch Text strukturierten weniger umfangreich und deshalb schneller übertragen.

Für Komfort ist gesorgt

Nicht menschenlesbar klingt zuerst einmal ungewohnt – bei der Arbeit mit gRPC spielt das aber keine Rolle, da entsprechende Tools bereitstehen. Es bietet ähnliche Vorteile wie GraphQLmit einem etwas anderen Ansatz:

  • Die Logik wird im Server programmiert, der Service zur Datenübertragung im Client wird daraus generiert – natürlich mit Types.
  • Die Kommunikation zwischen Client und Server basiert auf einem Contract: Beide wissen genau, welche Daten sie schicken müssen und erhalten.
  • Für den Umgang mit Breaking Changes (Deprecations) gibt es «Reserved Fields».