The defaults configured for GENERATOR_HOST didn't really make sense. When running the docker container with `-P`, GENERATOR_HOST defaulted to http://localhost. This caused download links for generated client/server code to be incorrect. For most cases, there's no reason to provide GENERATOR_HOST as the code already figures the appropriate scheme/host/port from the originating request. GENERATOR_HOST could still be used for more complex deployment scenarios, for instance if a specific server is configured as a file server. I haven't tested this scenario, and it may require mounting /tmp as a volume when running within a container.
4.5 KiB
id | title |
---|---|
online | Online |
Hosted
We offer online services, publicly and free of charge:
- latest stable version: http://api.openapi-generator.tech
- latest master: http://api-latest-master.openapi-generator.tech (updated with latest master every hour)
These services are beta and do not have any guarantee on service level
Docker Image
The openapi-generator-online Docker image can act as a self-hosted web application and API for generating code. This container can be incorporated into a CI pipeline, and requires at least two HTTP requests and some docker orchestration to access generated code.
Example usage:
# Start container at port 8888 and save the container id
CID=$(docker run -d -p 8888:8080 openapitools/openapi-generator-online)
# allow for startup
sleep 10
# Get the IP of the running container (optional)
GEN_IP=$(docker inspect --format '{{.NetworkSettings.IPAddress}}' ${CID})
# Execute an HTTP request to generate a Ruby client
curl -X POST --header 'Content-Type: application/json' \
--header 'Accept: application/json' \
-d '{"openAPIUrl": "https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/2_0/petstore.yaml"}' \
'http://localhost:8888/api/gen/clients/ruby'
# Example output:
# {"code":"c2d483.3.4672-40e9-91df-b9ffd18d22b8","link":"http://localhost:8888/api/gen/download/c2d483.3.4672-40e9-91df-b9ffd18d22b8"}
# Download the generated zip file (using "code" provided from your output)
wget http://localhost:8888/api/gen/download/c2d483.3.4672-40e9-91df-b9ffd18d22b8
# Unzip the file
unzip c2d483.3.4672-40e9-91df-b9ffd18d22b8
# Shutdown the openapi generator image
docker stop ${CID} && docker rm ${CID}
Local/Self-hosting
If you prefer to run the service locally, here are the steps:
mvn clean install
cd modules/openapi-generator-online
mvn spring-boot:run
The online openapi-generator can be run via Docker as well.
For example, to generate Ruby API client, simply send the following HTTP request using curl:
curl -X POST -H "content-type:application/json" -d '{"openAPIUrl":"https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/2_0/petstore.yaml"}' \
http://localhost:8080/api/gen/clients/ruby
Then you will receive a JSON response with the URL to download the zipped code.
To customize the SDK, you can POST
to http://localhost:8080/gen/clients/{generator}
with the following HTTP body:
{
"options": {},
"openAPIUrl": "https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/2_0/petstore.yaml"
}
Here, the options
for a language can be obtained by submitting a GET
request to http://locahost:8080/api/gen/clients/{generator}
:
For example, curl http://localhost:8080/api/gen/clients/python
returns
"packageName":{
"opt":"packageName",
"description":"python package name (convention: snake_case).",
"type":"string",
"default":"openapi_client"
},
"packageVersion":{
"opt":"packageVersion",
"description":"python package version.",
"type":"string",
"default":"1.0.0"
},
"sortParamsByRequiredFlag":{
"opt":"sortParamsByRequiredFlag",
"description":"Sort method arguments to place required parameters before optional parameters.",
"type":"boolean",
"default":"true"
}
{}
To set package name to pet_store
, the HTTP body of the request is as follows:
{
"options": {
"packageName": "pet_store"
},
"openAPIUrl": "https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/2_0/petstore.yaml"
}
and here is the curl command:
curl -H "Content-type: application/json" \
-X POST \
-d '{"options": {"packageName": "pet_store"},"openAPIUrl": "https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/2_0/petstore.yaml"}' \
http://localhost:8080/api/gen/clients/python
Instead of using openAPIUrl
with an URL to the OpenAPI spec, one can include the spec in the JSON payload with spec
:
{
"options": {},
"spec": {
"swagger": "2.0",
"info": {
"version": "1.0.0",
"title": "Test API"
},
...
}
}