jsonsubschema
jsonsubschema copied to clipboard
If RHS has optional fields, it isn't considered a subschema, inhibiting schema evolution
We are currently looking for a tool that can check schema compatibility.
One of the examples I used to test this software is to validate is to check a producer with additional unused fields works with a consumer without them. This is a common schema evolution pattern and this works with jsonsubschema. :heavy_check_mark:
However, a second schema evolution pattern we follow is for the consumer to add a field as optional and then to start using it as soon as the producer starts supplying it.
This does not seem to work with jsonsubschema.
Example consumer.json:
{
"properties": {
"required": {
"title": "Required",
"type": "string"
},
"onlyusefieldifpresent": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "onlyusefieldifpresent"
}
},
"required": [
"required"
],
"title": "Consumer",
"type": "object"
}
and this producer.json:
{
"properties": {
"required": {
"title": "Required",
"type": "string"
},
"unusedfield": {
"title": "Unusedoption",
"type": "string"
}
},
"required": [
"required",
"unusedfield"
],
"title": "Producer",
"type": "object"
}
>>> jsonsubschema producer.json consumer.json
LHS <: RHS False
Is this intentional behavior? Technically I suppose producer.json is not a subschema of consumer.json, but it is a subset of consumer.json's required fields.