CoderTools

Herramienta Protocol Buffers

Codificar, decodificar y validar mensajes Protocol Buffers

Esquema Proto

Esquemas de Ejemplo:

Entrada

Analice el esquema y seleccione un tipo de mensaje para generar los campos del formulario

Salida

Documentación de Protocol Buffers

¿Qué es Protocol Buffers?

Protocol Buffers (Protobuf) es un mecanismo extensible, independiente del lenguaje y la plataforma, para serializar datos estructurados, desarrollado por Google. Es más pequeño, más rápido y más simple que XML y JSON para la serialización de datos.

Características Principales

  • Independiente del lenguaje y la plataforma
  • Más pequeño y rápido que XML/JSON
  • Tipado fuerte con definición de esquema
  • Compatibilidad hacia adelante y hacia atrás
  • Generación automática de código
  • Codificación binaria eficiente

Cómo Usar Esta Herramienta

  1. Ingrese su definición de esquema .proto en el editor
  2. Haga clic en Analizar Esquema para validar y analizar
  3. Seleccione el tipo de mensaje deseado
  4. Para codificar: Ingrese datos JSON y haga clic en Codificar
  5. Para decodificar: Ingrese datos binarios y haga clic en Decodificar
  6. Use « Decodificación Cruda » para analizar datos binarios sin esquema

Funcionalidades de la Herramienta

Codificar

Convertir datos JSON a formato binario Protocol Buffers. Soporta entrada por formulario para fácil ingreso de datos con validación de tipos.

Decodificar

Convertir datos binarios Protocol Buffers a formato JSON legible. Soporta formatos de entrada Base64, Hex y Hex estilo C.

Decodificación Cruda

Analizar datos binarios protobuf sin esquema. Útil para depuración, ingeniería inversa o análisis de mensajes desconocidos.

Entrada por Formulario

Interfaz de formulario amigable que genera formularios de entrada basados en su esquema. Soporta mensajes anidados, enumeraciones y campos repetidos.

Referencia de Sintaxis Proto

Protocol Buffers usa una sintaxis simple para definir tipos de mensajes:

syntax = "proto3";

message Person {
    string name = 1;
    int32 id = 2;
    string email = 3;
    
    enum PhoneType {
        MOBILE = 0;
        HOME = 1;
        WORK = 2;
    }
    
    message PhoneNumber {
        string number = 1;
        PhoneType type = 2;
    }
    
    repeated PhoneNumber phones = 4;
}
  • syntax: Especifica la versión de protobuf (proto2 o proto3)
  • message: Define un tipo de mensaje con campos
  • field: Cada campo tiene un tipo, nombre y número único
  • enum: Define tipos de enumeración
  • repeated: Marca un campo como repetido (array/lista)
  • optional: Marca un campo como opcional (proto3)

Tipos Escalares

Protocol Buffers soporta varios tipos escalares:

Tipo Descripción Defecto
int32, int64Enteros con signo (codificación de longitud variable)0
uint32, uint64Enteros sin signo0
sint32, sint64Enteros con signo con codificación ZigZag (eficiente para negativos)0
fixed32, fixed64Enteros sin signo de ancho fijo (4 u 8 bytes)0
sfixed32, sfixed64Enteros con signo de ancho fijo (4 u 8 bytes)0
float, doubleNúmeros de punto flotante (32 o 64 bits)0.0
boolValores booleanos (verdadero/falso)false
stringCadenas de texto codificadas en UTF-8""
bytesDatos binarios arbitrariosempty

Tipos de Cable

Protobuf usa tipos de cable para determinar cómo leer valores de datos binarios:

Tipo de Cable Significado Usado Para
0Varintint32, int64, uint32, uint64, sint32, sint64, bool, enum
164-bitfixed64, sfixed64, double
2Length-delimitedstring, bytes, embedded messages, packed repeated
532-bitfixed32, sfixed32, float

Mejores Prácticas

  • Use sintaxis proto3 para nuevos proyectos - más simple y ampliamente soportado
  • Mantenga los números de campo estables - nunca reutilice o cambie números de campos existentes
  • Use nombres de campo significativos que describan claramente los datos
  • Reserve los números de campo 1-15 para campos frecuentemente usados (usan 1 byte)
  • Use la palabra clave 'repeated' para arrays/listas de valores
  • Defina enumeraciones para campos con un conjunto fijo de valores posibles

Preguntas Frecuentes

¿Cuál es la diferencia entre proto2 y proto3?

Proto3 simplifica la sintaxis eliminando campos requeridos - todos los campos son opcionales por defecto. También cambia los valores por defecto y elimina la detección de presencia de campos para tipos escalares. Proto3 es recomendado para nuevos proyectos.

¿Puedo decodificar protobuf sin esquema?

¡Sí! Use la función « Decodificación Cruda » para analizar datos binarios sin esquema. Los nombres de campos se mostrarán como números (field_1, field_2, etc.) y alguna información de tipo puede ser ambigua.

¿Por qué mis datos codificados son diferentes a lo esperado?

La codificación Protobuf es determinista, pero los valores por defecto (0, false, cadenas vacías) típicamente no se codifican en proto3 para ahorrar espacio. Además, el orden de campos en JSON no afecta la codificación binaria.

¿Cómo manejar mensajes anidados?

Defina mensajes anidados en su esquema y use objetos JSON anidados. En modo formulario, haga clic en el botón del campo anidado para abrir un diálogo de edición de datos anidados.

Casos de Uso Comunes

  • Comunicación entre servicios en microservicios (gRPC)
  • Almacenamiento de datos y caché
  • Archivos de configuración
  • Protocolos de red y API

Referencias