Open
Description
When comparing these 2 schemas:
test/old.json
{
"openapi": "3.0.0",
"servers": [{ "url": "https://myserver.com" }],
"info": { "title": "My API", "description": "Description", "version": "0.2.0" },
"paths": {
"/v1/entity/{id}": {
"put": {
"operationId": "myOperation",
"description": "Some description",
"requestBody": { "$ref": "#/components/requestBodies/updateBody" }
}
}
},
"components": {
"schemas": {},
"responses": {},
"requestBodies": {
"updateBody": {
"description": "Update description",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"url": { "type": "string", "description": "Some URL" }
},
"title": "updateBody",
"additionalProperties": false
}
}
}
}
},
"parameters": {}
}
}
test/new.json
{
"openapi": "3.0.0",
"servers": [{ "url": "https://myserver.com" }],
"info": { "title": "My API", "description": "Description", "version": "0.2.0" },
"paths": {
"/v1/entity/{id}": {
"put": {
"operationId": "myOperation",
"description": "Some description",
"requestBody": { "$ref": "#/components/requestBodies/updateBody" }
}
}
},
"components": {
"schemas": {},
"responses": {},
"requestBodies": {
"updateBody": {
"description": "Update description",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"url": { "type": "string", "description": "Some URL" },
"url2": { "type": "string", "description": "Some URL" }
},
"title": "updateBody",
"additionalProperties": false
}
}
}
}
},
"parameters": {}
}
}
I get a broken compatibility message:
docker run --rm -t -v $(pwd)/test/:/specs:ro openapitools/openapi-diff:latest --fail-on-incompatible /specs/old.json /specs/new.json
==========================================================================
== API CHANGE LOG ==
==========================================================================
My API
--------------------------------------------------------------------------
-- What's Changed --
--------------------------------------------------------------------------
- PUT /v1/entity/{id}
Request:
- Changed application/json
Schema: Broken compatibility
--------------------------------------------------------------------------
-- Result --
--------------------------------------------------------------------------
API changes broke backward compatibility
--------------------------------------------------------------------------
Note that the only change is the addition of the url2
optional property:
diff -u test/old.json test/new.json
--- test/old.json 2023-03-14 17:06:02
+++ test/new.json 2023-03-14 17:06:33
@@ -22,7 +22,8 @@
"schema": {
"type": "object",
"properties": {
- "url": { "type": "string", "description": "Some URL" }
+ "url": { "type": "string", "description": "Some URL" },
+ "url2": { "type": "string", "description": "Some URL" }
},
"title": "updateBody",
"additionalProperties": false
Since the required
field is absent, I would expect the addition of url2
to not create a broken compatibility error.