Compare two OpenAPI specifications(3.x) and render the difference to html file or markdown file.
jdk1.8+
- Supports OpenAPi spec v3.0.
- Depth comparison of parameters, responses, endpoint, http method(GET,POST,PUT,DELETE...)
- Supports swagger api Authorization
- Render difference of property with Expression Language
- html & markdown render
Available on Maven Central
<dependency>
<groupId>com.qdesrame</groupId>
<artifactId>openapi-diff</artifactId>
<version>1.1.1</version>
</dependency>
OpenDiff can read swagger api spec from json file or http.
$ openapi-diff --help
usage: openapi-diff <old> <new>
--debug Print debugging information
--error Print error information
-h,--help print this message
--header <property=value> use given header for authorisation
--html <file> export diff as html in given file
--info Print additional information
-l,--log <level> use given level for log (TRACE, DEBUG,
INFO, WARN, ERROR, OFF). Default: ERROR
--markdown <file> export diff as markdown in given file
-o,--output <format=file> use given format (html, markdown) for
output in file
--off No information printed
--query <property=value> use query param for authorisation
--trace be extra verbose
--version print the version information and exit
--warn Print warning information
public class Main {
public static final String OPENAPI_DOC1 = "petstore_v3_1.json";
public static final String OPENAPI_DOC2 = "petstore_v2_2.yaml";
public static void main(String[] args) {
ChangedOpenApi diff = OpenApiCompare.fromLocations(OPENAPI_DOC1, OPENAPI_DOC2);
//...
}
}
String html = new HtmlRender("Changelog",
"http://deepoove.com/swagger-diff/stylesheets/demo.css")
.render(diff);
try {
FileWriter fw = new FileWriter(
"testNewApi.html");
fw.write(html);
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
String render = new MarkdownRender().render(diff);
try {
FileWriter fw = new FileWriter(
"testDiff.md");
fw.write(render);
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
==========================================================================
== API CHANGE LOG ==
==========================================================================
Swagger Petstore
--------------------------------------------------------------------------
-- What's New --
--------------------------------------------------------------------------
- GET /pet/{petId}
--------------------------------------------------------------------------
-- What's Deleted --
--------------------------------------------------------------------------
- POST /pet/{petId}
--------------------------------------------------------------------------
-- What's Deprecated --
--------------------------------------------------------------------------
- GET /user/logout
--------------------------------------------------------------------------
-- What's Changed --
--------------------------------------------------------------------------
- PUT /pet
Request:
- Deleted application/xml
- Changed application/json
Schema: Backward compatible
- POST /pet
Parameter:
- Add tags in query
Request:
- Changed application/xml
Schema: Backward compatible
- Changed application/json
Schema: Backward compatible
- GET /pet/findByStatus
Parameter:
- Deprecated status in query
Return Type:
- Changed 200 OK
Media types:
- Changed application/xml
Schema: Broken compatibility
- Changed application/json
Schema: Broken compatibility
- GET /pet/findByTags
Return Type:
- Changed 200 OK
Media types:
- Changed application/xml
Schema: Broken compatibility
- Changed application/json
Schema: Broken compatibility
- DELETE /pet/{petId}
Parameter:
- Add newHeaderParam in header
- POST /pet/{petId}/uploadImage
Parameter:
- Changed petId in path
- POST /user
Request:
- Changed application/json
Schema: Backward compatible
- POST /user/createWithArray
Request:
- Changed application/json
Schema: Backward compatible
- POST /user/createWithList
Request:
- Changed application/json
Schema: Backward compatible
- GET /user/login
Parameter:
- Delete password in query
- GET /user/logout
- GET /user/{username}
Return Type:
- Changed 200 OK
Media types:
- Changed application/xml
Schema: Broken compatibility
- Changed application/json
Schema: Broken compatibility
- PUT /user/{username}
Request:
- Changed application/json
Schema: Backward compatible
--------------------------------------------------------------------------
-- Result --
--------------------------------------------------------------------------
API changes broke backward compatibility
--------------------------------------------------------------------------
### What's New
---
* `GET` /pet/{petId} Find pet by ID
### What's Deleted
---
* `POST` /pet/{petId} Updates a pet in the store with form data
### What's Deprecated
---
* `GET` /user/logout Logs out current logged in user session
### What's Changed
---
* `PUT` /pet Update an existing pet
Request
Deleted request body : [application/xml]
Changed response : [application/json]
* `POST` /pet Add a new pet to the store
Parameter
Add tags //add new query param demo
Request
Changed response : [application/xml]
Changed response : [application/json]
* `GET` /pet/findByStatus Finds Pets by status
Parameter
Return Type
Changed response : [200] //successful operation
* `GET` /pet/findByTags Finds Pets by tags
Return Type
Changed response : [200] //successful operation
* `DELETE` /pet/{petId} Deletes a pet
Parameter
Add newHeaderParam
* `POST` /pet/{petId}/uploadImage uploads an image for pet
Parameter
petId Notes ID of pet to update change into ID of pet to update, default false
* `POST` /user Create user
Request
Changed response : [application/json]
* `POST` /user/createWithArray Creates list of users with given input array
Request
Changed response : [application/json]
* `POST` /user/createWithList Creates list of users with given input array
Request
Changed response : [application/json]
* `GET` /user/login Logs user into the system
Parameter
Delete password //The password for login in clear text
* `GET` /user/logout Logs out current logged in user session
* `PUT` /user/{username} Updated user
Request
Changed response : [application/json]
* `GET` /user/{username} Get user by user name
Return Type
Changed response : [200] //successful operation
openapi-diff is released under the Apache License 2.0.
- Adarsh Sharma / adarshsharma