Protocol Buffers Version 3

In diesem Kapitel wird erläutert, wie Sie Protocol Buffers im API-Design verwenden. Zur Vereinfachung der Entwicklungsarbeit und Verbesserung der Laufzeiteffizienz sollten gRPC APIs Protocol Buffers Version 3 (proto3) für die API-Definition verwenden.

Protocol Buffers ist eine einfache sprach- und plattformneutrale Interface Definition Language (IDL), mit der Sie Datenstrukturschemas und Programmierschnittstellen definieren können. Sie unterstützt sowohl binäre als auch Textübertragungsformate und kann mit zahlreichen unterschiedlichen Verbindungsprotokollen auf verschiedenen Plattformen verwendet werden.

Proto3 ist die neueste Version von Protocol Buffers. Sie beinhaltet gegenüber proto2 die folgenden Änderungen:

  • Die Feldpräsenz, auch als hasField bezeichnet, wird bei einfachen Feldern standardmäßig entfernt. Ein nicht festgelegtes einfaches Feld hat einen sprachspezifischen Standardwert.
    • Das Vorhandensein eines Nachrichtenfelds ist weiterhin verfügbar, das mit der vom Compiler generierten hasField-Methode getestet oder mit null oder dem von der Implementierung definierten Sentinel-Wert verglichen werden kann.
    • Ab Version 3.14 des Protokollzwischenspeichers können einfache Felder zwischen dem Standardwert und dem nicht festgelegten Wert mithilfe des Keywords optional unterscheiden. Dies wird jedoch allgemein nicht empfohlen.
  • Der benutzerdefinierte Standardwert für Felder ist nicht mehr verfügbar.
  • ENUM-Definitionen müssen mit dem ENUM-Wert null beginnen.
  • Erforderliche Felder sind nicht mehr verfügbar.
  • Erweiterungen sind nicht mehr verfügbar. Verwenden Sie stattdessen google.protobuf.Any.
    • Aus Gründen der Abwärts- und Laufzeitkompatibilität wird für google/protobuf/descriptor.proto eine spezielle Ausnahme gewährt.
  • Die Gruppensyntax wurde entfernt.

Diese Funktionen wurden entfernt, um API-Designs einfacher, stabiler und leistungsfähiger zu gestalten. Es ist beispielsweise oft erforderlich, bestimmte Felder vor dem Logging einer Nachricht zu filtern, um vertrauliche Informationen zu entfernen. Dies wäre nicht möglich, wenn die Felder erforderlich wären.

Weitere Informationen erhalten Sie unter Protocol Buffers.