Manual generation and maintenance of Swagger JSON for REST services can be painful because you have to provide too many details about a REST service. To avoid this manual work we have developed API2Swagger tool to generate Swagger JSON automatically by invoking REST service(s).
- Swagger JSON generation using builders
- Swagger JSON generation using command line utility
- JSON schema generation from JSON response data
- Capability of updating existing Swagger JSON document with new API
- Capability of modifying existing Swagger JSON with API related modifications - which includes adding new request parameters, response changes
- Capability of recognizing 'FILE' downloads via REST API because Swagger JSON document has special way treating for FILE downloads
To build the project including standalone jar
./gradlew clean buildall
Built library can be found under <root-project>/build/libs
.
api2swagger-1.0.jar
is a binary that can be used in other applications as a libraryapi2swagger-all-1.0.jar
is a binary to be used as a standalone application
Various command line options are:
Argument | Human Readable Form | Description |
---|---|---|
-e | --endpoint | specify endpoint URL, this URL will be invoked and response will be generated. |
-o | --output | output file to which Swagger JSON will be written |
-m | --method | specify HTTP verb - GET, POST on which endpoint URL will be invoked |
-h | --header | specify any request headers that should be sent when endpoint URL is invoked |
-p | --param | specify request param in key value params e.g: param=value, you can specify multiple -p arguments |
-pp | --pathparam | specify path parameter values part of endpoint URL, path parameters should be specified in endpoint as "{pathParameterName}" and its value specified using this argument. You can specify multiple path parameters. please refer examples section for more details. |
-a | --authentication | Acts as a boolean command line arguments specifying whether authentication is required for invoking endpoint URL |
-username | --username | Username for authentication |
-password | --password | Password for authentication |
-host | --host | Hostname value will be populated in Swagger JSON's 'host' attribute |
-apipath | --apipath | Base Path for Swagger document |
-apiname | --apiname | Unique API name for a given endpoint URL |
-apidescription | --apidescription | API Description for a given endpoint URL |
-apisummary | --apisummary | Summary for given endpoint URL |
-tag | --apiTag | Tag name for given endpoint URL. You can provide multiple tag names for the endpoint |
-basepath | --basepath | Base Path for Swagger JSON's 'basepath' attribute, Swagger API path is calculated from base path |
-help | --help | Display help |
GET API without any parameters and authentication:
<JAVA_HOME>/bin/java" -jar %JAR% -e "http://httpbin.org/ip" -o "SWAGGER-DOC-FILE-PATH" -m "GET" -apiname "UniqueApiName" -tag "GetIPAddress" -apiSummary "API to fetch IP Address" -apidescription "Fetch IP address in origin attribute"
GET API with authentication using -a, --username and --password:
<JAVA_HOME>/bin/java" -jar %JAR% -e "http://httpbin.org/ip" -o "SWAGGER-DOC-FILE-PATH" -m "GET" -a --username "someusername" --password "somePassword" -apiname "UniqueApiName" -tag "GetIPAddress" -apisummary "API to fetch IP Address" -apidescription "Fetch IP address in origin attribute"
GET API with query parameters using -p argument:
<JAVA_HOME>/bin/java" -jar %JAR% -e "http://httpbin.org/ip" -o "SWAGGER-DOC-FILE-PATH" -m "GET" -a --username "someusername" --password "somePassword" -p "param1=value1" -p "param2=value2" -apiname "UniqueApiName" -tag "GetIPAddress" -apisummary "API to fetch IP Address" -apidescription "Fetch IP address in origin attribute"
GET API with path parameters using -pp argument:
<JAVA_HOME>/bin/java" -jar %JAR% -e "http://httpbin.org/ip/{pathparam1}/{pathparam2}" -o "SWAGGER-DOC-FILE-PATH" -m "GET" -a --username "someusername" --password "somePassword" -pp "pathparam1=value1" -pp "pathparam2=value2" -apiname "UniqueApiName" -tag "GetIPAddress" -apisummary "API to fetch IP Address" -apidescription "Fetch IP address in origin attribute"
GET API with path parameters using -pp argument and query parameters using -p:
<JAVA_HOME>/bin/java" -jar %JAR% -e "http://httpbin.org/ip/{pathparam1}/{pathparam2}" -o "SWAGGER-DOC-FILE-PATH" -m "GET" -a --username "someusername" --password "somePassword" -pp "pathparam1=value1" -pp "pathparam2=value2" -p "queryparam=value" -apiname "UniqueApiName" -tag "GetIPAddress" -apisummary "API to fetch IP Address" -apidescription "Fetch IP address in origin attribute"
POST API with path parameters using -pp argument and query parameters using -p:
<JAVA_HOME>/bin/java" -jar %JAR% -e "http://httpbin.org/ip/{pathparam1}/{pathparam2}" -o "SWAGGER-DOC-FILE-PATH" -m "POST" -a --username "someusername" --password "somePassword" -pp "pathparam1=value1" -pp "pathparam2=value2" -p "queryparam=value" -apiname "UniqueApiName" -tag "GetIPAddress" -apisummary "API to fetch IP Address" -apidescription "Fetch IP address in origin attribute"
DELETE API with parameters:
<JAVA_HOME>/bin/java" -jar %JAR% -e "http://httpbin.org/ip/{pathparam1}/{pathparam2}" -o "SWAGGER-DOC-FILE-PATH" -m "DELETE" -a --username "someusername" --password "somePassword" -pp "pathparam1=value1" -pp "pathparam2=value2" -p "queryparam=value" -apiname "UniqueApiName" -tag "GetIPAddress" -apisummary "API to fetch IP Address" -apidescription "Fetch IP address in origin attribute"
You can use SwaggerGenerator
class for generating Swagger JSON, just pass SwaggerGeneratorInput
to generator class..voila it will generate Swagger
model for you!
SwaggerGeneratorInput userInput = new SwaggerGeneratorInput.Builder()
.endpoint(endpoint)
.method(method)
.pathParams(pathParamMap)
.parameters(paramMap)
.headers(headerMap)
.swaggerJSONFilePath(outputFilePath)
.authentication(isAuthenticationNeeded)
.username(username)
.password(password)
.host(host)
.basePath(basePath)
.apiName(apiName)
.apiDescription(apiDescription)
.apiSummary(apiSummary)
.apiTags(apiTags)
.build();
SwaggerGenerator main = new SwaggerGenerator(userInput);
Optional<Swagger> outputSwagger = main.buildSwaggerJson();
if(outputSwagger.isPresent()){
//then do something...
}
Want to contribute? Great! Open an issue or email me providing your feedback or open a pull request.
- Consider JSON request data
- Consider to emit response headers in Swagger JSON document
- Consider to generate Swagger document in XML format
- Fix bugs