Decodificación Protobuf

ApiCatcher permite decodificar datos binarios Protobuf de solicitudes/respuestas HTTP/HTTPS a texto plano para facilitar su visualización y análisis.

Por defecto, ApiCatcher detecta automáticamente si el encabezado Content-Type de la solicitud/respuesta coincide con tipos de contenido Protobuf comunes como application/protobuf o application/x-protobuf. Si coincide, intentará decodificar.

private static func isProtobufContentType(_ contentType: String) -> Bool {
    let ct = contentType.lowercased().trimmingCharacters(in: .whitespacesAndNewlines)
    let mimeType = ct.components(separatedBy: ";").first?.trimmingCharacters(in: .whitespaces) ?? ct
    return mimeType == "application/protobuf"
        || mimeType == "application/x-protobuf"
        || mimeType == "application/x-google-protobuf"
        || mimeType == "application/grpc"
        || mimeType == "application/grpc+proto"
        || mimeType == "application/protobuf+json"
        || mimeType == "x-protobuf"
}

Si el Content-Type no corresponde a los tipos anteriores, ApiCatcher no intentará decodificar automáticamente, pero puede usar la herramienta de decodificación para decodificar manualmente — haga clic en el icono "Unlock" en la tarjeta Body, cambie a "Protobuf" y luego haga clic en el botón "Decodificar".

El resultado de decodificación predeterminado tiene poca legibilidad porque no hay nombres de campos. Si tiene un archivo *.desc, puede importarlo para decodificar los nombres de los campos. Si el archivo *.desc es correcto, el resultado se convertirá al formato JSON, mucho más legible. Aquí tiene una comparación de resultados con y sin archivo *.desc:

Comparación de resultados de decodificación Protobuf con y sin archivo descriptor: lado izquierdo sin nombres de campo, lado derecho con nombres de campo completos

Importar archivos descriptores Protobuf (*.desc)

¿Qué es un archivo *.desc?

Un archivo *.desc es el resultado serializado binario de un Descriptor de Archivo Protobuf (File Descriptor), que contiene todas las estructuras de mensajes, enumeraciones, definiciones de servicios y otros metadatos definidos en los archivos Proto. Es esencial para analizar datos binarios Protobuf.

Si solo tiene archivos *.proto, necesita convertirlos a un archivo *.desc antes de poder usarlo para la decodificación Protobuf.

¿Cómo generar un archivo *.desc?

Si tiene un conjunto de archivos *.proto, puede usar la herramienta de línea de comandos protoc para generar uno o más archivos *.desc. Pasos:

1. Instalar la herramienta de línea de comandos protobuf:

brew install protobuf

2. Preparar los archivos proto:

Cree una carpeta input y copie todos los archivos *.proto en ella.

3. Ejecutar el comando de generación:

protoc --descriptor_set_out=output.desc \
  --include_imports \
  -I=/path/to/input \
  /path/to/input/*.proto

Descripción de parámetros:

ParámetroDescripción
--descriptor_set_out=output.descEspecifica la ruta del archivo descriptor de salida
--include_importsIncluye todos los archivos import dependientes, garantizando un resultado autónomo sin dependencias adicionales
-I=/path/to/inputEspecifica la ruta de búsqueda de archivos proto (prefijo para rutas de importación)
/path/to/input/*.protoLos archivos proto a compilar (admite comodines)

Después de la ejecución, se generará un archivo output.desc en el directorio actual. Transfiéralo a su teléfono e impórtelo en ApiCatcher para usarlo posteriormente.

Importar archivos *.desc y gestionar archivos *.desc importados

Cuando el Body de la solicitud se puede decodificar como Protobuf, la tarjeta mostrará la sugerencia "Seleccione un archivo *.desc para decodificar nombres de campo" y proporcionará un botón de selección. Haga clic en el botón de selección para elegir un archivo *.desc importado, y se decodificarán los nombres de los campos. También puede importar un archivo en este momento. Los archivos importados se almacenan en caché localmente y se pueden gestionar en "Configuración → Administrador de archivos Protobuf".

Haga clic en el botón de selección para elegir un archivo *.desc importado y decodificar nombres de campo