JSON 개발 지침
GitLab에서는 많은 양의 JSON 데이터를 처리합니다. 대규모 JSON 인코딩 또는 디코딩을 처리할 때 최상의 성능을 보장하기 위해 기본 메서드 대신 자체 JSON 클래스를 사용합니다.
Gitlab::Json
기본 JSON
클래스, .to_json
호출 및 유사한 모든 호출 대신에 이 클래스를 사용해야 합니다. 이 클래스는 .parse
, .generate
, .dump
등 JSON
에서 제공하는 대부분의 공개 메서드를 구현하며 응답에서 완전히 동일해야 합니다.
차이점은 Gitlab::Json
을 통해 모든 JSON 처리를 전송함으로써 우리가 백그라운드에서 사용되는 젬을 변경할 수 있다는 점입니다. 우리는 json
젬 대신 C 확장을 사용하는 oj
를 사용합니다. 따라서 이 방법은 현저히 빠릅니다.
이 클래스가 나타난 이유는 GitLab 애플리케이션의 연식으로 인해 기본적으로 json
젬을 oj
로 교체하는 것이 불가능하다는 것을 증명했기 때문입니다. 왜냐하면:
- 정확한 응답에 대한 테스트 수
- 서로 다른 JSON 프로세서 간의 미묘한 차이점, 특히 포맷팅 주변
Gitlab::Json
클래스는 이를 고려하고 사용 사례에 따라 어댑터를 다양화하고 오래된 포맷팅 기대를 고려합니다.
Gitlab::Json::PrecompiledJson
이 클래스는 Grape 프레임워크로의 후크에서 이미 생성된 JSON이 응답을 반환할 때 두 번째로 JSON 생성을 실행하지 않도록 보장합니다.
Gitlab::Json::LimitedEncoder
이 클래스는 JSON을 생성하지만 결과 JSON이 너무 크면 오류가 발생하도록 할 수 있습니다. .encode
메서드의 기본 제한은 25MB이지만 해당 메서드를 사용할 때 사용자 정의할 수 있습니다.