JSON 개발 가이드라인

GitLab에서는 많은 양의 JSON 데이터를 처리합니다. 대규모 JSON 인코딩 또는 디코딩을 처리할 때 최상의 성능을 보장하기 위해 기본 메서드 대신에 자체 JSON 클래스를 사용합니다.

Gitlab::Json

기본 JSON 클래스, .to_json 호출 및 유사한 모든 호출 대신에 이 클래스를 사용해야 합니다. 이 클래스는 .parse, .generate, .dumpJSON에서 제공하는 대부분의 공개 메서드를 구현하며, 응답에서 완전히 동일해야 합니다.

차이점은 모든 JSON 처리를 Gitlab::Json을 통해 보내면 백그라운드에서 사용하는 젬을 변경할 수 있다는 것입니다. 우리는 oj를 사용하여 json 젬 대신에 사용하며, 이는 C 확장을 사용하므로 빠릅니다.

이 클래스가 생성된 이유는 GitLab 애플리케이션의 연식으로 인해 기본 json 젬을 기본으로 oj로 교체하는 것이 불가능했기 때문입니다. 왜냐하면:

  • 정확한 응답을 기대하는 테스트의 수가 많았습니다.
  • 서로 다른 JSON 프로세서 간에 미묘한 차이가 있었습니다.

Gitlab::Json 클래스는 이러한 점을 고려하여 어댑터를 사용 사례에 따라 변경하고 오래된 형식 기대를 고려할 수 있습니다.

Gitlab::Json::PrecompiledJson

이 클래스는 Grape 프레임워크에 대한 훅에서 이미 생성된 JSON이 응답을 반환할 때 두 번째로 JSON 생성되지 않도록 보장합니다.

Gitlab::Json::LimitedEncoder

이 클래스는 JSON을 생성할 수 있지만 결과 JSON이 너무 크다면 오류가 발생합니다. .encode 메서드의 기본 제한은 25MB이지만 이 메서드를 사용할 때 사용자 정의할 수 있습니다.