Definiciones de Protocol Buffers

Formateador Protobuf

Examina una definición proto3 independiente como árbol, código formateado o estructura JSON. Los números de campo se conservan.

Formateador Protobuf

Código proto3

Resultado

    El código permanece en el navegador. No se cargan imports ni se envían solicitudes de red.

    Opciones

    Subconjunto proto3 de un solo archivo. Sin imports, opciones personalizadas, compilación ni comprobación de compatibilidad. Editar el código restablece la raíz.

    Límites: 100.000 caracteres UTF-16, 20.000 tokens, 2.000 declaraciones y 32 niveles; tiempo máximo de 8 segundos.

    Resultado desactualizado. La exportación está desactivada.

    Un formateador Protobuf ayuda a leer una definición copiada con pocas separaciones, pero ordenar el código no resuelve un número reservado ni una referencia desconocida. Este panel comprueba las declaraciones admitidas antes de habilitar la exportación de sus resultados.

    El árbol conserva los nombres originales y muestra los tipos con su ruta completa. JSON Schema plantea otra pregunta: qué forma de datos puede tener el mensaje elegido. Mantén el contrato original para consultar servicios, reservas y comportamientos que no se trasladan a esa proyección.

    Por qué usar este formateador Protobuf

    Distingue tipos con el mismo nombre

    El formateador Protobuf conserva el orden de las declaraciones y resuelve las referencias con nombres completos. OuterA.Item y OuterB.Item siguen siendo tipos distintos. Las referencias recursivas se muestran como rutas, sin desplegar una cadena interminable de nodos.

    Un documento de código conectado a un árbol con mensajes anidados separados.

    Revisa el mensaje que necesita tu integración

    Selecciona el mensaje raíz cuando un archivo define varias estructuras. El $ref principal cambia y los tipos compartidos permanecen en $defs. Así puedes comparar listas, mapas y campos de contacto excluyentes sin duplicar definiciones ni perder la identidad de los tipos.

    Dos tipos anidados de apariencia similar desembocan en definiciones de esquema independientes.

    Tres decisiones antes de exportar

    01

    Elige una raíz que sea un mensaje

    La primera declaración message es la raíz inicial, aunque el archivo empiece por un enum o incluya servicios. El selector utiliza nombres completos. Editar el código restablece la selección para evitar que un tipo eliminado siga figurando como raíz de un resultado antiguo.

    02

    Explora sin cambiar el contrato

    Expande o contrae nodos y utiliza el número de línea para volver a la declaración. El árbol muestra 50 entradas visibles por lote. Al copiar la estructura se exportan todas las declaraciones, incluidas las contraídas y las que todavía no aparecen en pantalla.

    03

    Observa cuándo cambia el resultado

    La comprobación automática espera 350 ms tras editar. Al desactivarla aparecen el botón principal y el atajo Ctrl/Cmd + Enter. Los cambios bloquean de inmediato la exportación antigua. Ejemplo y Vaciar muestran una vista previa del reemplazo; Deshacer restaura código y resultado juntos.

    Lectura del código y del modelo de datos

    Sangría sin alterar los identificadores

    Este formateador de Protocol Buffers utiliza dos o cuatro espacios. Conserva comentarios, cadenas, nombres, números y orden de los campos. Las llaves o los puntos y coma dentro de una cadena no se interpretan como estructura. El código formateado se analiza de nuevo y su descriptor se compara con el original antes de exportarlo.

    Validación de sintaxis y numeración

    Cada número de campo debe ser positivo, único en su mensaje y ajeno a 19000–19999. Las reservas posteriores también se comprueban. El primer valor de un enum proto3 debe ser cero y los alias numéricos necesitan allow_alias. Estos controles se refieren al archivo actual, sin suponer nada sobre versiones anteriores.

    Referencias dentro de archivos proto

    El árbol incluye paquetes, mensajes, enums, oneof, servicios y RPC. Admite referencias adelantadas, tipos anidados y mensajes recursivos dentro del mismo archivo. Si falta un tipo, la generación se detiene. Los campos conservan snake_case en el árbol aunque JSON use lowerCamelCase.

    Una proyección con referencias reutilizables

    El documento JSON Schema 2020-12 utiliza nombres completos en $defs. repeated se convierte en array, map en objeto e int64 en cadena. Un grupo oneof permite cero o un miembro presente, nunca dos. Los campos simples y los optional pueden omitirse; no se añade required por suposición.

    Alcance admitido y límites de conversión

    Un solo archivo con proto3 explícito
    La primera declaración debe ser syntax = "proto3";. No se admiten proto2, Editions, required, group ni extensions. Se rechazan todos los imports, incluidos Timestamp y Any. Los contratos con dependencias deben comprobarse con los archivos y directorios de búsqueda del proyecto.
    Opciones conocidas y usos concretos
    Se aceptan opciones habituales de generación de código a nivel de archivo y usos válidos de json_name, packed, deprecated y allow_alias. Se rechazan opciones personalizadas o agregadas, anotaciones de validación y CEL. Conservar opciones de generación no implica producir restricciones de negocio en JSON Schema.
    La proyección no sustituye al analizador ProtoJSON
    Representa formas de salida habituales, sin reproducir todas las entradas toleradas. Quedan fuera null como ausencia, enums numéricos y cadenas numéricas permisivas. El patrón de un entero como texto no comprueba todo el rango de 64 bits; contentEncoding base64 es una anotación. Añade las restricciones necesarias para tus datos.
    No se repara el contrato automáticamente
    No se renumeran campos, eliminan reservas ni sobrescribe la entrada al formatear. El archivo actual no revela qué tags se usaron antes. La compilación con protoc, Buf lint, detección de cambios incompatibles, generación de clientes y salida OpenAPI corresponden al entorno del proyecto.
    Recursos limitados por ejecución
    Se admiten 100.000 caracteres UTF-16, 20.000 tokens, 2.000 declaraciones y 32 niveles de anidamiento. La salida no supera 1.000.000 de caracteres y el worker se detiene a los ocho segundos. Superar un límite produce un error, en lugar de presentar como válido un esquema recortado.
    Definiciones en lugar de mensajes codificados
    La entrada es código .proto, no datos binarios, Base64 o TextFormat. Puedes obtener código, un informe de estructura o un esquema, pero no un mensaje decodificado. Tampoco hay conversión inversa desde JSON Schema, lotes de archivos, carga remota ni enlaces que incluyan el código.

    Preguntas sobre el formateador Protobuf

    ¿Se pueden numerar los campos desde cero?

    No. Los tags de mensaje van de 1 a 536870911, excluyendo 19000–19999 por estar reservados para la implementación. Los valores de enum tienen otra función: la primera declaración de un enum proto3 debe valer cero. La herramienta aplica reglas separadas para no confundir un tag inválido con un valor de enumeración obligatorio.

    ¿Puedo dejar huecos entre los números de campo?

    Sí. No es necesario usar números consecutivos. Un campo 1 seguido de un campo 20 es válido si no hay duplicados ni reservas en conflicto. El formato conserva los huecos y el orden. Para impedir que se reutilice un número antiguo, decláralo en reserved; dejar un hueco no documenta por sí solo el historial.

    ¿Cómo se declara un campo opcional en proto3?

    Escribe optional antes del tipo para conservar información explícita de presencia en el código generado. El árbol muestra esa declaración. En el JSON Schema exportado pueden faltar tanto los campos simples como los optional; no se representa el método has generado ni la diferencia entre ausencia y valor predeterminado devuelto por el runtime.

    ¿Por qué int64 aparece como cadena en JSON?

    Un número normal de JavaScript no representa exactamente todos los enteros de 64 bits. Las salidas ProtoJSON habituales usan cadenas decimales. La proyección conserva esa forma sin convertirla a Number. El patrón comprueba cómo está escrito el valor, pero el rango exacto con o sin signo necesita validación adicional.

    ¿Por qué falla un import aunque su ruta sea correcta?

    El compilador busca dependencias según sus directorios de importación configurados. Este panel no dispone de árbol de archivos ni de un resolvedor, por lo que rechaza cualquier import de forma explícita. Comprueba el proyecto completo con protoc o Buf. La ruta no se descarga ni se omite para dar una falsa impresión de éxito.

    ¿Has encontrado una definición que debería admitirse?

    Revisa la próxima definición

    Usa el formateador Protobuf para examinar las declaraciones admitidas y llevar el código y su forma JSON revisada al proyecto. La compilación final sigue necesitando todas las dependencias.