Help us learn about your current experience with the documentation. Take the survey.
JSON 开发指南
在 GitLab 中,我们处理大量的 JSON 数据。为了在处理大型 JSON 编码或解码时确保最佳性能,我们使用自己的 JSON 类而不是默认方法。
Gitlab::Json
这个类应该用来替代对默认 JSON 类的任何调用、.to_json 调用等。它实现了 JSON 提供的大部分公共方法,如 .parse、.generate、.dump 等,并且其响应应该完全相同。
区别在于,通过 Gitlab::Json 处理所有 JSON,我们可以在后台更改使用的 gem。我们使用 oj 而不是 json gem,因为它使用 C 扩展,因此明显更快。
这个类的出现是因为,由于 GitLab 应用的历史原因,默认情况下直接用 oj 替换 json gem 是不可能的,因为:
- 大量测试对响应有精确的期望。
- 不同 JSON 处理器之间的细微差异,特别是在格式化方面。
Gitlab::Json 类考虑了这一点,可以根据用例改变适配器,并处理过时的格式化期望。
Gitlab::Json::PrecompiledJson
这个类被我们用于 Grape 框架的钩子中,以确保已经生成的 JSON 在返回响应时不会再次经过 JSON 生成处理。
Gitlab::Json::LimitedEncoder
这个类可以用来生成 JSON,但如果生成的 JSON 过大,则会失败并报错。.encode 方法的默认限制是 25 MB,但在使用该方法时可以自定义这个限制。