Comparar
Protocol Buffers o JSON
Protocol Buffers define mensajes tipados desde esquemas `.proto` y ofrece un wire format binario basado en números de campo, además de un mapeo ProtoJSON separado. JSON es texto general según RFC 8259 y no presupone un esquema concreto.
¿Qué formato deberías elegir?
Elige Protobuf para mensajes RPC o entre servicios cuando se gestionen contratos tipados y compatibilidad binaria. Elige JSON para estructuras textuales genéricas y herramientas JSON amplias.
Adecuado para Esquema de Protocol Buffers
Definir la estructura de mensajes Protocol Buffers · Compartir contratos de datos entre lenguajes
- Generar código para distintos lenguajes con protoc
- Definir mensajes para RPC y comunicación entre servicios
Adecuado para JSON
API web, archivos de configuración e intercambio de datos
- Transferir datos estructurados
Información básica
| Campo | Esquema de Protocol Buffers | JSON |
|---|---|---|
| Extensión | .proto | .json |
| Tipo MIME | text/plain | application/json |
| Usos habituales | Definir la estructura de mensajes Protocol Buffers · Compartir contratos de datos entre lenguajes | API web, archivos de configuración e intercambio de datos |
| Cómo abrir | Ábrelo en un editor de texto o un IDE compatible con Protocol Buffers. Para validar la sintaxis y las importaciones, compílalo con la versión y configuración de protoc que use el proyecto. | Ábralo en un editor de texto, IDE o visor compatible con JSON. |
| Exportar o convertir | Al pasar a otro formato de esquema, asigna los tipos, números de campo, valores predeterminados, enumeraciones y reglas de compatibilidad. Después genera el código y prueba datos reales. Cambiar la extensión a .json o a una de formato binario no lo convierte. | Las aplicaciones o herramientas de conversión pueden convertirlo a formatos como CSV. |
Elegir según el uso
Generar código para distintos lenguajes con protoc
Definir la estructura de mensajes Protocol Buffers · Compartir contratos de datos entre lenguajes
Esquema de Protocol BuffersDefinir mensajes para RPC y comunicación entre servicios
Definir la estructura de mensajes Protocol Buffers · Compartir contratos de datos entre lenguajes
Esquema de Protocol BuffersTransferir datos estructurados
API web, archivos de configuración e intercambio de datos
JSONPunto clave 1
Los datos binarios wire de Protobuf dependen de una definición `.proto` y números de campo. JSON representa objetos y arreglos textuales sin exigir esquema; ProtoJSON es un mapeo aparte de tipos Protobuf a valores JSON.
Más sobre las diferenciasPunto clave 2
ProtoJSON convierte bytes en cadenas base64, int64 en cadenas, enums en nombres y campos en claves JSON. Estas reglas no son el wire format binario ni un JSON Schema arbitrario.
Más sobre las diferenciasMás sobre las diferencias
Usa Protobuf para contratos tipados entre servicios e intercambio binario compacto. Usa JSON para interfaces textuales genéricas. Si empleas la representación JSON de Protobuf, sigue ProtoJSON; no supongas que cualquier documento JSON es equivalente. Prueba presencia, null, rangos, campos desconocidos y evolución del esquema.
- Los mensajes wire Protobuf requieren un esquema compatible para interpretar números de campo y tipos. La sintaxis JSON genérica no requiere esquema.
- ProtoJSON tiene mapeos y reglas de compatibilidad propios; es menos eficiente que el wire binario y no conserva campos desconocidos de la misma manera.
- La conversión puede afectar presencia, precisión entera, nombres de enum, claves de mapa, oneof, null y campos desconocidos. Valida con bibliotecas reales y versiones antiguas y nuevas del esquema.
Preguntas frecuentes
¿ProtoJSON es intercambiable con cualquier documento JSON?
No. ProtoJSON representa esquemas expresables en Protobuf y sigue reglas propias; no puede expresar cualquier esquema JSON ni conservar todo el comportamiento del wire format.