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 디코딩 결과 비교: 왼쪽은 필드 이름 없음, 오른쪽은 전체 필드 이름 표시

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/inputproto 파일 검색 경로 지정 (import 경로 접두사)
/path/to/input/*.proto컴파일할 proto 파일 (와일드카드 지원)

실행 후 현재 디렉터리에 output.desc 파일이 생성됩니다. 이를 휴대폰으로 전송하여 ApiCatcher에서 가져와 사용할 수 있습니다.

*.desc 파일 가져오기 및 가져온 *.desc 파일 관리

요청 Body가 Protobuf로 디코딩 가능한 경우 카드에 "*.desc 파일을 선택하여 필드 이름 디코딩"이라는 힌트가 표시되고 선택 버튼이 제공됩니다. 선택 버튼을 클릭하여 가져온 *.desc 파일을 선택하면 필드 이름이 디코딩됩니다. 이 시점에서 파일을 가져올 수도 있습니다. 가져온 파일은 로컬에 캐시되며 "설정→Protobuf 파일 관리"에서 관리할 수 있습니다.

선택 버튼을 클릭하여 가져온 *.desc 파일을 선택해 필드 이름 디코딩