
Restful Beispiel, das auf JaxRS und Google Protocol Buffers (protobuf) basiert (+ Maven und Java 8)
GitHub Fork
Einfach https://github.com/sam6-de/RestfulProtobuf besuchen und den Anweisungen folgen.
Restful Java Api mit Protobuf
Dieser Artikel beschreibt einen Prototyp für ein Standalone war. Es bietet einen Restful-Service mit Jersey / JAX-RS (JSR 311) und Google Protocol Buffers (protobuf).
Dieses Projekt ist nur eine Machbarkeitsstudie und ist nicht Produktionsreif.
Vorbereitung
Das Projekt benötigt die folgenden Tools in den angegebenen Versionen:
Quickstart
Um sofort loslegen zu können, musst du nur drei Schritte ausführen:
- Das Projekt von GitHub mittels
git clone https://github.com/sam6-de/RestfulProtobuf.gitclonen. - Das frisch geclonte Projekt über
cd ./RestfulProtobuf/ && mvn clean installmit Maven bauen. - Den eingebetteten Jetty mittels
cd ./RestWebapp/target/ && java -jar RestWebapp-1.0-SNAPSHOT.warstarten.
Zack: Jetzt ist der Dienst über den Port 8080 aktiv.
Über einen Browser kannst du jetzt direkt darauf zugreifen. Das heißt, du rufst im Browser einfach die URL http://localhost:8080/rest/hello/world auf.
Jersey generiert automatisch eine WADL-Datei, die alle logischen Operationen beschreibt: http://localhost:8080/rest/application.wadl.
Das erste Dokument ist eine vereinfachte WADL, die nur Benutzer- und Kernressourcen beschreibt.
Um eine vollständige WADL mit erweiterten Ressourcen zu erhalten, nutzt du einfach den Abfrageparameter detail:http://localhost:8080/rest/application.wadl?Detail=true
Restful Protobuf API from Scratch
Um das Grundgerüst manuell über Maven Archetypes aufzubauen, geht man am einfachsten wie hier beschrieben vor.
Vorbereitung
Wir wollen das Maven-Projekt als Multi-Modul-Projekt einrichten. Dazu müssen wir zuerst eine root-Datei pom.xml erstellen.
Das klappt am schnellsten auf der Konsole, indem du folgenden Befehl ausführst:
mvn archetype:generate \ -DarchetypeGroupId=org.codehaus.mojo.archetypes \ -DarchetypeArtifactId=pom-root \ -DarchetypeVersion=RELEASE \ -DgroupId=de.sam6.demo \ -DartifactId=RestfulProtobuf \ -DinteractiveMode=false
Danach wollen wir ein neues, erstes Submodul im Projekt erstellen. Wechsel also in das neu erzeugte Verzeichnis. Innerhalb nutzen wir wieder einen Maven-Archetyp, diesmal vom Typ webapp. Er erstellt die (meisten) erforderlichen Ordner und Dateien:
cd RestfulProtobuf/ mvn archetype:generate \ -DarchetypeArtifactId=maven-archetype-webapp \ -DgroupId=de.sam6.demo \ -DartifactId=RestWebapp \ -DinteractiveMode=false
Da der java-Quellordner nicht automatisch erstellt wird, erstellst du ihn einfach manuell:
mkdir RestWebapp/src/main/java
Fertig! Jetzt kannst du das gesamte Multi-Modul-Projekt in die Lieblings-IDE importieren.
Abhängigkeiten
Damit alle Abhängigkeiten, die wir benötigen, korrekt aufgelöst werden können, fügen wir diese der pom.xml hinzu.
JAX-RS 2.0 Implementierung
Für den Restful-Service verwendete Abhängigkeiten sind:
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.18</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.18</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.18</version>
</dependency>Google Protocol Buffers (protobuf)
Die Protobuf-Bibliothek unterstützt eine extrem schnelle (De-)Serialisierung, die von unserem Service als Austauschformat verwendet wird:
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.0.0-alpha-3</version>
</dependency>Standalone Restful Protobuf API
Damit die Applikation einfach so gestartet werden kann, gibt es hier einen weiteren Import:
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-webapp</artifactId>
<version>9.3.0.v20150612</version>
<scope>provided</scope>
</dependency>Das war es auch schon. Jetzt liegt es an dir, weitere Funktionen hinzu zu fügen. Viel Spaß dabei!
Weitere interessante Blog-Artikel gibt es im Chameleon Blog.
