Einen REST Service in 15 min mit Quarkus, OpenAPI, Swagger UI und JUnit-Test erstellen und um CO2-Ampel Service erweitern ist nicht kompliziert.
Vorraussetzungen Java 11 und Maven. Test mit:
mvn -version
auf der Kommandozeile:
1 2 3 4 5 6 |
➜ ~ mvn -version Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f) Maven home: /opt/local/share/java/maven3 Java version: 11.0.9, vendor: AdoptOpenJDK, runtime: /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home Default locale: de_DE, platform encoding: UTF-8 OS name: "mac os x", version: "10.15.7", arch: "x86_64", family: "mac" |
Dann fangen wir in einem leeren Verzeichnis an
1 2 |
mkdir rest-co2ampel cd rest-co2ampel |
jetzt rufen wir mit dem Maven Quarkus Plugin das create Goal auf:
1 |
mvn io.quarkus:quarkus-maven-plugin:1.9.0.Final:create -DprojectGroupId=de.wenzlaff.co2ampel -DprojectArtifactId=info-kleinhirn -DclassName="de.wenzlaff.Co2AmpelResource" -Dpath="/co2ampel" |
Zwei Sekunden später, ist das Projekt angelegt:
1 2 3 4 5 6 7 8 9 10 11 12 |
[INFO] ======================================================================================== [INFO] Your new application has been created in /Users/thomaswenzlaff/rest-co2ampel/info-kleinhirn [INFO] Navigate into this directory and launch your application with mvn quarkus:dev [INFO] Your application will be accessible on http://localhost:8080 [INFO] ======================================================================================== [INFO] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.898 s [INFO] Finished at: 2020-10-27T12:57:17+01:00 [INFO] ------------------------------------------------------------------------ |
Nun gehen wir in das erzeugte Verzeichnis: cd info-kleinhirn
Nun starten wir den build und den Server mit:
mvn quarkus:dev
Ein paar Sekunden später ist alles gebaut, und der Server läuft:
1 2 3 4 5 6 7 8 9 |
[INFO] Compiling 1 source file to /Users/thomaswenzlaff/rest-co2ampel/info-kleinhirn/target/classes Listening for transport dt_socket at address: 5005 __ ____ __ _____ ___ __ ____ ______ --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \ --\___\_\____/_/ |_/_/|_/_/|_|\____/___/ 2020-10-27 13:00:57,115 INFO [io.quarkus] (Quarkus Main Thread) info-kleinhirn 1.0-SNAPSHOT on JVM (powered by Quarkus 1.9.0.Final) started in 0.836s. Listening on: http://0.0.0.0:8080 2020-10-27 13:00:57,118 INFO [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated. 2020-10-27 13:00:57,118 INFO [io.quarkus] (Quarkus Main Thread) Installed features: [cdi, resteasy] |
Ein Aufruf von
bringt die statische Webseite. Und ein
http://localhost:8080/co2ampel
liefert den Aufruf des REST CO2Ampel Services.
Nun unterbrechen wir den Server mit CTLR-C und ergänzen für den Test die Swaggert GUI hinzu, einfach ein
1 |
./mvnw quarkus:add-extension -Dextensions="quarkus-smallrye-openapi" |
und ein neues starten:
./mvnw compile quarkus:dev
Dann im Browser die GUI Aufrufen:
http://localhost:8080/swagger-ui/
Cool:
Und openapi geht auch, einfach in einem neuen Fenster ein
curl http://localhost:8080/openapi
So, jetzt nur noch echt CO2 Messung einbauen. Ich habe einen Mqtt-Broker der die Werte liefert.
Wir gehen in das Verzeichnis und /rest-co2ampel/info-kleinhirn/src/main/java/de/wenzlaff und holen uns die zwei Beispielklasse von github mit:
1 2 3 |
curl https://gist.githubusercontent.com/IT-Berater/c58da54b1f20337827f8de827715d728/raw/10d721ca73148b3be195d6fc2fa45ff02af42d9d/CO2AmpelResource.java > CO2AmpelResource.java curl https://gist.githubusercontent.com/IT-Berater/dc7695fdb406d6f93d4a47553d309ec9/raw/a7928a1527d164d2a51ddece19fefc431c3c46a1/MqttCo2Client.java > MqttCo2Client.java |
Dann gehen wir in das Wurzelverzeichnis des Projektes und fügen in der pom.xml diese beiden abhängigkeiten hinzu:
1 2 3 4 5 6 7 8 9 10 |
<dependency> <groupId>org.eclipse.paho</groupId> <artifactId>org.eclipse.paho.client.mqttv3</artifactId> <version>1.2.5</version> </dependency> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20200518</version> </dependency> |
Dann müssen wir noch den JUnit Test anpassen.Dazu die Testklasse Co2AmpelResourceTest.java in der Methode testHelloEndpoint() diesen Inhalt einfügen:
1 |
given().when().get("/v1/rest/co2").then().statusCode(200).body(is("CO2 Wert: 0")); |
So, nun können wir das Projekt starten:
./mvnw compile quarkus:dev
So der JUnit Test wurde erfolgreich ausgeführt. Nun kann der REST-Service über die URL
http://localhost:8080/v1/rest/co2
abgefragt werden. Wenn der Mqtt-Service Werte die entsprechenden Werte liefert, sonst 0 😉
Und auch über die openapi stehen die REST-Services bereit, cool …
Openapi geht auch:
Und hier, wenn der Mqtt-Server echte Werte liefert (evl. den Server localhost in der Java-Klasse MqttCo2Client durch einen anderen ersetzen, bei mir läuf der CO2-Sensor auf einem Raspberry Pi, wie hier im Blog beschrieben):