Herramienta Protocol Buffers
Codificar, decodificar y validar mensajes Protocol Buffers
Esquema Proto
Información del Esquema
Entrada
Analice el esquema y seleccione un tipo de mensaje para generar los campos del formulario
Salida
Campos Crudos
| N° Campo | Tipo de Cable | Valor |
|---|
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
- Ingrese su definición de esquema .proto en el editor
- Haga clic en Analizar Esquema para validar y analizar
- Seleccione el tipo de mensaje deseado
- Para codificar: Ingrese datos JSON y haga clic en Codificar
- Para decodificar: Ingrese datos binarios y haga clic en Decodificar
- 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 camposfield: Cada campo tiene un tipo, nombre y número únicoenum: Define tipos de enumeraciónrepeated: 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, int64 | Enteros con signo (codificación de longitud variable) | 0 |
| uint32, uint64 | Enteros sin signo | 0 |
| sint32, sint64 | Enteros con signo con codificación ZigZag (eficiente para negativos) | 0 |
| fixed32, fixed64 | Enteros sin signo de ancho fijo (4 u 8 bytes) | 0 |
| sfixed32, sfixed64 | Enteros con signo de ancho fijo (4 u 8 bytes) | 0 |
| float, double | Números de punto flotante (32 o 64 bits) | 0.0 |
| bool | Valores booleanos (verdadero/falso) | false |
| string | Cadenas de texto codificadas en UTF-8 | "" |
| bytes | Datos binarios arbitrarios | empty |
Tipos de Cable
Protobuf usa tipos de cable para determinar cómo leer valores de datos binarios:
| Tipo de Cable | Significado | Usado Para |
|---|---|---|
| 0 | Varint | int32, int64, uint32, uint64, sint32, sint64, bool, enum |
| 1 | 64-bit | fixed64, sfixed64, double |
| 2 | Length-delimited | string, bytes, embedded messages, packed repeated |
| 5 | 32-bit | fixed32, 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