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 in un campo, nota anche come
hasField
, viene rimossa per impostazione predefinita per e campi primitivi. Un campo primitivo non impostato ha un valore predefinito definito dalla lingua valore.- La presenza di un campo del messaggio è ancora disponibile e può essere testato
utilizzando il metodo
hasField
generato dal compilatore o confrontalo con un valore nullo o 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.
- La presenza di un campo del messaggio è ancora disponibile e può essere testato
utilizzando il metodo
- Il valore predefinito definito dall'utente per i campi non è più disponibile.
- Le definizioni enum devono iniziare con un valore enum pari a 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.
- È concessa un'eccezione speciale per
- La sintassi del gruppo viene rimossa.
Il motivo della rimozione di queste funzionalità è quello di semplificare la progettazione delle API, più stabili e più performanti. 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.
Vedi Buffer di protocollo per ulteriori informazioni.