InfoGrab DocsInfoGrab Docs

JSON 개발 가이드라인

GitLab에서 대용량 JSON 인코딩·디코딩을 성능적으로 처리하기 위해 사용하는 Gitlab::Json 클래스와 관련 유틸리티 클래스를 설명합니다.

GitLab에서는 방대한 양의 JSON 데이터를 처리합니다. 대용량 JSON 인코딩 또는 디코딩 시 최적의 성능을 보장하기 위해, 기본 메서드 대신 자체 JSON 클래스를 사용합니다. Gitlab::Json # 이 클래스는 기본 JSON 클래스 호출, .to_json 호출 등을 대체하여 사용해야 합니다. .parse , .generate , .dump 등 JSON 이 제공하는 대부분의 공개 메서드를 구현하며, 응답 결과는 기본 클래스와 완전히 동일합니다. 차이점은 모든 JSON 처리를 Gitlab::Json 을 통해 수행함으로써 내부적으로 사용하는 gem을 교체할 수 있다는 점입니다. 기본 json gem 대신 C 확장을 사용하는 oj 를 사용하여 현저히 빠른 성능을 제공합니다. 이 클래스가 만들어진 이유는, GitLab 애플리케이션의 오랜 역사로 인해 기본 json gem을 oj 로 단순 교체하는 것이 불가능했기 때문입니다: 응답 결과에 대한 정확한 기댓값을 갖는 테스트 케이스가 방대하게 존재합니다. 서로 다른 JSON 프로세서 간, 특히 포매팅과 관련하여 미묘한 차이가 있습니다. Gitlab::Json 클래스는 이러한 점을 고려하여 사용 사례에 따라 어댑터를 유연하게 변경할 수 있으며, 구식 포매팅 기댓값도 처리할 수 있습니다. Gitlab::Json.safe_parse 클래스 메서드는 더 이상 사용되지 않습니다(deprecated). 신뢰할 수 없는 입력을 파싱하려면 대신 Gitlab::Json::SafeParser 를 사용하세요. Gitlab::Json::SafeParser # Gitlab::Json::SafeParser 는 Oj::Parser.safe 를 감싸는 얇은 래퍼로, JSON 파싱에 구조적 제한을 적용하고 저수준 파서 오류를 사용자에게 안전한 JSON::ParserError 메시지로 변환합니다. 신뢰할 수 없는 소스에서 JSON을 파싱할 때는 항상 이 클래스를 사용하세요. 기반 파서 # Gitlab::Json::SafeParser 는 Oj의 최신 Oj::Parser.safe 파서를 사용합니다. Gitlab::Json.parse 와 더 이상 사용되지 않는 Gitlab::Json.safe_parse 는 :rails 모드에서 Oj.load 를 사용합니다. 이 둘은 서로 다른 Oj 파서이며, 다음 측면에서 동작이 다를 수 있습니다: 지원되는 옵션. Gitlab::Json::SafeParser 는 PARSE_LIMITS 에 정의된 키만 허용합니다. Gitlab::Json.parse 에서 동작하는 symbolize_keys 와 같은 옵션은 전달되지 않습니다. 매우 큰 숫자 값, NaN 및 Infinity , 중복 키, 후행 데이터와 같은 엣지 케이스 값의 처리. 잘못된 형식의 JSON에 대한 정확한 오류 메시지 텍스트. Gitlab::Json.parse 또는 Gitlab::Json.safe_parse 에서 마이그레이션할 때는 대표적인 페이로드를 테스트하고, 파서별 동작이나 오류 문자열에 의존하는 어설션을 업데이트하세요. 파싱 제한