JSON開発者のためのガイドライン

GitLabでは多くのJSONデータを扱います。大きなJSONのエンコードやデコードを扱う際にパフォーマンスを保つために、デフォルトのメソッドではなく独自のJSONクラスを使用しています。

Gitlab::Json

このクラスは、デフォルトのJSON クラスへの呼び出しや.to_json 呼び出しなどの代わりに使用する必要があります。このクラスは、.parse.generate.dumpなど、JSON によって提供される公開メソッドの大部分を実装しており、そのレスポンスは完全に同一でなければなりません。

違いは、すべてのJSON処理をGitlab::Json 、バックグラウンドで使用されるgemを変更できることです。json gemの代わりにoj 。このgemはC拡張を使用しているため、著しく高速です。

このクラスが存在するようになったのは、GitLabアプリケーションが古くなったため、json gemをデフォルトのoj に置き換えることができなくなったからです:

  • レスポンスを正確に予想するテストの数。
  • 異なるJSONプロセッサ間の微妙な差異、特にフォーマットに関する差異。

Gitlab::Json クラスはこの点を考慮し、ユースケースに応じてアダプタを変更したり、時代遅れのフォーマットを考慮したりすることができます。

Gitlab::Json::PrecompiledJson

このクラスは、Grapeフレームワークのフックで使用され、レスポンスを返すときに、すでに生成されたJSONが2回目のJSON生成で実行されないようにします。

Gitlab::Json::LimitedEncoder

このクラスは、JSONを生成するために使用できますが、結果のJSONが大きすぎる場合はエラーで失敗します。.encode メソッドのデフォルトの制限は 25 MB ですが、メソッドを使用するときにカスタマイズできます。