Protocol Buffers v3

Questo capitolo illustra come utilizzare i buffer di protocollo con la progettazione di API. Per semplificare l'esperienza degli sviluppatori e migliorare l'efficienza di runtime, le API gRPC devono utilizzare Protocol Buffers versione 3 (proto3) per la definizione dell'API.

Protocol Buffer è un semplice strumento Interface Definition Language (IDL) indipendente dal linguaggio e dalla piattaforma per definire gli schemi della struttura dei dati e le interfacce di programmazione. Supporta sia i formati di dati binari che di testo e funziona con molti protocolli di dati diversi su piattaforme diverse.

Proto3 è la versione più recente di Protocol Buffers e include le seguenti modifiche rispetto a proto2:

  • La presenza del campo, nota anche come hasField, viene rimossa per impostazione predefinita per i campi primitivi. Un campo primitivo non impostato ha un valore predefinito definito dalla lingua valore.
    • È ancora disponibile la presenza di un campo messaggio, che può essere testato utilizzando il metodo hasField generato dal compilatore o confrontato con null o con il valore sentinella definito dall'implementazione.
    • A partire da protobuf v3.14, i campi primitivi possono distinguere tra il valore predefinito e annullare l'impostazione utilizzando il optional parola chiave, sebbene questo sia generalmente sconsigliato.
  • Il valore predefinito definito dall'utente per i campi non è più disponibile.
  • Le definizioni di enum devono iniziare con il valore enum zero.
  • I campi obbligatori non sono più disponibili.
  • Le estensioni non sono più disponibili. Usa invece il criterio google.protobuf.Any.
    • È concessa un'eccezione speciale per google/protobuf/descriptor.proto per motivi di compatibilità con le versioni precedenti e di runtime.
  • La sintassi di gruppo viene rimossa.

Il motivo della rimozione di queste funzionalità è semplificare, stabilizzare e migliorare il rendimento dei progetti API. Ad esempio, spesso è necessario filtrare prima di registrare un messaggio, come la rimozione di informazioni sensibili. Questo non sarebbe possibile se i campi sono obbligatori.

Per ulteriori informazioni, consulta Protocol Buffers.