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 명령줄 도구를 사용하여 하나 이상의 *.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 파일 관리"에서 관리할 수 있습니다.
