RAML API client code generators based on the RMF (REST Modeling Framework). The code generators are written in kotlin.
JAVA_CLIENT
:- Java types for JSON serialization/deserialization of RAML types via Jackson
- Java client for accessing RAML resources via Spring RestTemplate
TYPESCRIPT_CLIENT
:- TypeScript types generated from RAML types
- TypeScript types for validating JSON payloads via hapijs/joi
CSHARP_CLIENT
PHP_CLIENT
POSTMAN
: Collection file for the Postman API ClientRAML_DOC
: Emits RAML files targeted at generating robust and stable API documentation. Fully flattens and resolves types and resources. The output RAML has a fixed canonical filesystem structure and every type or resource file contains all information to fully document it. It's used by the commercetools-docs-kit
To install the rmf-codegen cli, run the following command
curl -o- -s https://raw.githubusercontent.com/commercetools/rmf-codegen/main/scripts/install.sh | bash
You will find a new command available rmf-codegen
, you can check that all is good by executing rmf-codegen -v
The commercetools-docs-kit
provides an NPM package that automates the download of the JAR and provides the rmf-codegen
command to JavaScript projects without global installation. (find at NPM)
Docker images for the code generator are available in the Github Container Registry
docker pull docker.pkg.github.com/commercetools/rmf-codegen/codegen:latest
General Usage:
Usage: rmf-codegen [-hv] [COMMAND]
Allows to validate RAML files and generate code from them
-h, --help display this help message
-v, --version print version information and exit
Commands:
generate Generate source code from a RAML specification.
verify Allows to verify if a raml spec is valid.
validate Validate the raml spec against defined rules and generate a validation report.
Generating Client SDKs or normalized RAML for documentation:
Usage: rmf-codegen generate [-hvw] [-b=<basePackageName>]
[-c=<clientPackageName>] [-m=<modelPackageName>]
-o=<outputFolder> [-s=<sharedPackage>] -t=<target>
<ramlFileLocation>
Generate source code from a RAML specification.
<ramlFileLocation> Api file location
-b, --base-package=<basePackageName>
The base package, this package in case the model or
client models aren't provided
-c, --client-package=<clientPackageName>
The client package, This will be used as the package
for the client stub.
-h, --help display this help message
-m, --model-package=<modelPackageName>
The models package, this will be used as the model
package in the generated code.
-o, --output-folder=<outputFolder>
Output folder for generated files.
-s, --shared-package=<sharedPackage>
The shared package to be used for the generated code.
-t, --target=<target> Specifies the code generation target
Valid values: JAVA_CLIENT, TYPESCRIPT_CLIENT,
CSHARP_CLIENT, PHP_CLIENT, PHP_BASE, PHP_TEST,
POSTMAN, RAML_DOC
-v, --verbose If set, this would move the verbosity level to debug.
-w, --watch Watches the files for changes
Verifying a RAML API:
Usage: rmf-codegen verify [-hw] <ramlFileLocation>
Allows to verify if a RAML spec is valid.
<ramlFileLocation> Api file location
-h, --help display this help message
-w, --watch Watches the files for changes
Validating a RAML API and generating a validity report:
Usage: <main class> validate [-hvw] [--list-rules] [-f=<outputFormat>]
[-l=<linkBase>] [-lf=<linkFormat>]
[-o=<outputTarget>] [-r=<rulesetFile>]
[-s=<checkSeverity>] [-t=<tempFile>]
<ramlFileLocation>
Allows to verify if a raml spec is valid according to CT guidelines and generates a validation report
<ramlFileLocation> Api file location
-f, --format=<outputFormat> Specifies the output format. Valid values: CLI, JSON, MARKDOWN
-h, --help display this help message
-l, --link-base=<linkBase>
-lf, --link-format=<linkFormat> Specifies the link format. Valid values: CLI, GITHUB
--list-rules Show all rules
-o, --outputTarget=<outputTarget>
-r, --ruleset=<rulesetFile> Ruleset configuration
-s, --severity=<checkSeverity> Diagnostic severity. Valid values: info, warn, error
-t, --temp=<tempFile> Temporary folder
-v, --verbose Verbose
-w, --watch Watches the files for changes
A single "fat jar" is built with the following commands:
cd tools/cli-application/
../../gradlew build
The JAR can then be found at ./rmf-codegen.jar
A native executable is built with the following commands:
cd tools/cli-application/
../../gradlew nativeImage
The native executable can then be found at ./tools/cli-application/build/graal/rmf-codegen
.
It's currently only tested with Mac OS X. It emits error messages but the functionality works.
We choose kotlin because of the following features:
- extension methods, which allow us to add methods to our RMF model types
- multi-line template string with embedded expressions, which allows us to keep the templates and the code in the same file
- it integrates very well with our RMF Java types
- it has very good IDE support, which makes writing code generators very easy
These features help in developing code generators for different programming languges/frameworks.
Our TestCodeGenerator
test can be run against a user provided RAML file by setting
the TEST_RAML_FILE
environment variable to the file path.