Protobuf デコード
ApiCatcherは、HTTP/HTTPSリクエスト/レスポンスのProtobufエンコードされたバイナリデータをプレーンテキストにデコードし、簡単に表示・分析できるようにします。
デフォルトでは、ApiCatcherはリクエスト/レスポンスのContent-Typeヘッダーが application/protobuf や application/x-protobuf などの一般的なProtobufコンテンツタイプに一致するかどうかを自動検出し、一致する場合はデコードを試みます。
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"
}
Content-Typeが上記のタイプでない場合、ApiCatcherは自動的にデコードを試みませんが、デコードツールを使用して手動でデコードできます。Bodyカードの「Unlock」アイコンをクリックし、「Protobuf」に切り替え、「デコード」ボタンをクリックします。
デフォルトのデコード結果はフィールド名がないため可読性が低くなります。*.desc ファイルをお持ちの場合は、それをインポートしてフィールド名をデコードできます。*.desc ファイルが正しい場合、デコード結果はJSON形式に変換され、可読性が大幅に向上します。
*.desc ファイルの有無によるデコード結果の比較は次のとおりです:

Protobuf記述子ファイル(*.desc)のインポート
*.desc ファイルとは?
*.desc ファイルは、Protobufファイル記述子(File Descriptor) のバイナリシリアライズ結果であり、Protoファイルで定義されたすべてのメッセージ構造、列挙型、サービス定義などのメタ情報を含みます。Protobufバイナリデータの解析に必要不可欠です。
手元に *.proto ファイルしかない場合は、Protobufデコードに使用する前に *.desc ファイルに変換する必要があります。
*.desc ファイルの生成方法
*.proto ファイルが複数ある場合、protoc コマンドラインツールを使用して1つまたは複数の *.desc ファイルを生成できます。手順は次のとおりです:
1. protobufコマンドラインツールのインストール:
brew install protobuf
2. protoファイルの準備:
input フォルダを作成し、すべての *.proto ファイルをそのフォルダにコピーします。
3. 生成コマンドの実行:
protoc --descriptor_set_out=output.desc \
--include_imports \
-I=/path/to/input \
/path/to/input/*.proto
パラメータの説明:
| パラメータ | 説明 |
|---|---|
--descriptor_set_out=output.desc | 出力する記述子ファイルのパスを指定 |
--include_imports | 依存するすべてのimportファイルを含め、追加の依存関係なしでインポート後にすぐに使用可能 |
-I=/path/to/input | protoファイルの検索パスを指定(importパスのプレフィックス) |
/path/to/input/*.proto | コンパイルするprotoファイル(ワイルドカード対応) |
実行後、現在のディレクトリに output.desc ファイルが生成されます。これを携帯電話に転送し、ApiCatcherにインポートして使用します。

リクエストBodyがProtobufデコード可能な場合、カードに「*.descファイルを選択してフィールド名をデコード」というヒントが表示され、選択ボタンが用意されています。
選択ボタンをクリックしてインポート済みの *.desc ファイルを選択すると、フィールド名がデコードされます。この時点でファイルをインポートすることもできます。
インポートされたファイルはローカルにキャッシュされ、「設定→Protobufファイル管理」で管理できます。
