Format Atlas

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

CampoEsquema de Protocol BuffersJSON
Extensión.proto.json
Tipo MIMEtext/plainapplication/json
Usos habitualesDefinir la estructura de mensajes Protocol Buffers · Compartir contratos de datos entre lenguajesAPI 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 convertirAl 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 Buffers

Definir mensajes para RPC y comunicación entre servicios

Definir la estructura de mensajes Protocol Buffers · Compartir contratos de datos entre lenguajes

Esquema de Protocol Buffers

Transferir datos estructurados

API web, archivos de configuración e intercambio de datos

JSON

Punto 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 diferencias

Punto 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 diferencias

Má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.

Más información

Referencias y especificaciones