JSON 模式语义版本控制

JSON Schema Semantic Versioning

我有一项管理某些系统配置的服务,这些配置作为 .json 文件存储在文件系统中。每次启动时,该服务都会启动,读取配置并使用这些值来修改所述系统配置。

在使用这些值之前,我正在使用 JSON 模式验证器来确认数据是否正确。

现在我的问题是,如何实现 JSON 模式的语义版本控制并检查 json 数据是否使用了正确的版本。

目前,如果架构发生变化且数据未更改,验证程序将退出并显示错误代码,这很好。但不太好的是我收到的错误消息。

我喜欢做的是,在验证之前检查数据的版本是否与架构的版本匹配,如果不匹配,则抛出一个期望,告诉用户数据与架构不兼容因为版本不匹配。

经过一些研究后,我在 JSON 模式中发现了以下键:

"$id": "https://my-company.org/schemas/config/0.1.0/config.schema.json"

此 URI 可用于控制模式本身的版本,但我如何检查数据是否使用该模式的正确版本?

将版本标识符作为 URI 的一部分存储在 $id 中很常见,而且似乎是版本控制 JSON 架构的最佳解决方案。 (我还没有看到更好的解决方案,事实证明这种方法可以大规模使用。)

或者,您可以在 JSON 架构中添加您自己的字段,但人员和代码需要知道才能查找它。

当您使用 JSON 架构验证数据时,有时您会加载所有架构,然后指定要使用的架构的 ID。

可以根据需要存储要验证某些 JSON 数据的架构版本。虽然未在 JSON 架构规范中定义,但通常将架构中定义的完整 URI $id 值存储在 $schema 字段中的数据中。

规范中没有定义,因为我们不想对数据规定要求。