Mit Swagger gibt es seit einigen Jahren eine Möglichkeit REST-API sinnvoll zu dokumentieren und zu generieren. Aus einer YAML-Datei, welche die Beschreibung der API enthält kann mit dem Swagger Code Generator (kurz Swagger Codegen) eine entsprechende Client-Bibliothek oder ein Server-Stub erzeugt werden. Eine solche minimale YAML-Datei könnte wie folgt aussehen:
swagger: '2.0'
info:
description: "API"
version: "2018.04"
title: "API"
host: "api.example.com"
basePath: "/v1"
schemes:
- "https"
paths:
/tree:
get:
produces:
- "application/json"
summary: Returns the document tree
tags:
- "Document tree"
description: Lorem Ipsum dolor sit amet
responses:
200:
description: OK
In dieser Datei wird eine Ressource mit dem Namen tree und für diese eine Get-Methode definiert. Um daraus nun die Client-Bibliotheken bzw. Server-Stubs zu generieren muss der Swagger Codegen über Git bezogen, anschließend kompiliert und paketiert werden:
https://github.com/swagger-api/swagger-codegen.git
cd swagger-codegen
mvn clean package
Zur Erzeugung eines PHP-Server-Stubs mit dem Slim-Framework kann der Swagger Codegen anschließend wie folgt genutzt werden:
java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate -i api.yaml -l slim -o folder/slim
Eine Client-Bibliothek wird auf dem gleichen Weg erzeugt:
java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate -i api.yaml -l javascript -o folder/javascript
In diesem Fall wird eine JavaScript-Client-Bibliothek erzeugt. Die verfügbaren Sprachen bzw. Frameworks für die Clients und Server-Stubs erzeugt werden können, können mit dem Befehl:
java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar langs
angezeigt werden. Die Ausgabe spezifiziert alle vorhandenen Generatoren:
Available languages: [ada, ada-server, akka-scala, android, apache2, apex, aspnetcore, bash, csharp, clojure, cwiki, cpprest, csharp-dotnet2, dart, elixir, elm, eiffel, erlang-client, erlang-server, finch, flash, python-flask, go, go-server, groovy, haskell-http-client, haskell, jmeter, jaxrs-cxf-client, jaxrs-cxf, java, inflector, jaxrs-cxf-cdi, jaxrs-spec, jaxrs, msf4j, java-pkmst, java-play-framework, jaxrs-resteasy-eap, jaxrs-resteasy, javascript, javascript-closure-angular, java-vertx, kotlin, lua, lumen, nancyfx, nodejs-server, objc, perl, php, powershell, pistache-server, python, qt5cpp, r, rails5, restbed, ruby, rust, rust-server, scala, scala-gatling, scala-lagom-server, scalatra, scalaz, php-silex, sinatra, slim, spring, dynamic-html, html2, html, swagger, swagger-yaml, swift4, swift3, swift, php-symfony, tizen, typescript-aurelia, typescript-angular, typescript-inversify, typescript-angularjs, typescript-fetch, typescript-jquery, typescript-node, undertow, ze-ph, kotlin-server]
Lizenziert ist der Swagger Codegen unter der Apache Licence in der Version 2 und somit freie Software.