This generator is based on the OpenAPI 3.0 specification, and it is a new specification that is supposed to replace Swagger 2.0 specification. It has some significant changes to enhance the spec definition and simply the validate with only JSON schema. In my opinion, it is much easier to use, and the implementation is much simpler then Swagger 2.0. OpenAPI adds a number of features as well. The only issue I can see is the entire toolchains around Swagger 2.0 are not migrated to OpenAPI 3.0 yet, and we have to build our own openapi-parser for parsing and validation.
In light-rest-4j framework generator, the model that drives code generation is the OpenAPI 3.0 specification previously named Swagger specification. When editing it, it usually will be in YAML format with separate files for readability and flexibility. Before leverage it in the light-rest-4j framework, all YAML files need to be bundled to a single file in YAML or JSON format to be consumed by the framework and generator. Also, validation needs to be done to make sure that the openapi.yaml or openapi.json is valid against JSON schema of OpenAPI 3.0 specification.
Note: we only support OpenAPI 3.0 specification for Kotlin.
generateEnvVars.generate:boolean whether the environment based variables should be generated. This is considered false if not set.
If this is set to false, config files are copied to target folder (if it is different from source folder).
If this is set to true, config values are re-written to environment based values.
generateEnvVars.skipArray: boolean whether Arrays in the config files should be re-written or not. This is considered false if not set.
generateEnvVars.skipMap: boolean whether Maps in the config files should be re-written or not. This is considered false if not set.
generateEnvVars.exclude: Array a list of files that should not be re-written
In most cases, developers will only update handlers, handler tests, and models in a generated project. Of course, you might need a different database for your project, and we have a database tutorial that can help you to further config Oracle and Postgres.
Given we have most of our model and config files in model-config repo, most generator input would come from the rest folder in model-config for the light-rest-4j framework.
Let’s clone the project to your workspace as we will need it in the following steps. I am using ~/networknt as a workspace, but it can be anywhere in your home directory.
git clone https://github.com/networknt/model-config.git
Java Command line
Before using the command line to generate the code, you need to check out the light-codegen repo and build it. I am using ~/networknt as the workspace, but it can be anywhere in your home directory.
git clone https://github.com/networknt/light-codegen.git
mvn clean install
The default format for OpenAPI 3.0 specification is YAML. Given we have test openapi.yaml and config.json in light-rest-4j/src/test/resources folder, the following command line will generate a RESTful API at /tmp/openapi-yaml folder.
Please note that you need to use a raw URL when accessing GitHub files. The above command line will generate a petstore service in /tmp/openapi-petstore.
Given we have most of the model and config files in the model-config repo, most generator input would from the rest folder in model-config. Here is the example to generate petstore. Assuming model-config is in the same workspace as light-codegen.
On Linux environment, the generated code might belong to root:root and you need to change the owner to yourself before building it.
sudo chown -R steve:steve generated
./gradlew clean build run
To test it.
You can use docker run command to call the generator, but it is very complicated for the parameters. To make things easier and friendlier to DevOps flow. Let’s create a script to call the command line from a docker image.
If you look at the docker run command you can see that we basically need one input folder for schema and config files and one output folder to generate code. Once these volumes are mapped to a local directory and with framework specified, it is easy to derive other files based on
./generate.sh openapikotlin ~/networknt/model-config/rest/openapi/petstore/1.0.0 /tmp/petstore
Now you should have a project generated in /tmp/petstore/genereted
The service API is ready. We are working on the UI with a generation wizard.