Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Microservices mit Spring Boot

RESTful Services mit Spring Boot bereitstellen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Setzen Sie sich in diesem Film damit auseinander, wie Sie mit Spring Boot einen RESTful-Webservice bereitstellen können, der als Backend für eine kleine Gästebuch-Applikation dienen kann.

Transkript

Eine Microservice-basierende-Applikation besteht üblicherweise aus mehreren Einzelservices. Ein Service ist dabei üblicherweise für die Darstellung des Frontend zuständig, ein zweiter oder mehrere Services kümmern sich um die Verarbeitung der Daten, um die Bereitstellung der Daten und um die Geschäftslogik. Wir werden uns in diesem Video einmal damit auseinandersetzen, wie wir mit Spring Boot einen RESTful-Webservice bereitstellen können, der als Backend für eine kleine Gästebuch-Applikation dienen kann. So einen RESTful-Service legen wir im Eclipse per "File" "New" "Spring Starter Project" an. Hier können wir diesem Service einen Namen geben, wir können eine Group-Id festlegen, diese Group-Id ist üblicherweise bei allen Services, die eine Gesamtapplikation bilden gleich, die Artifact-Id wird jeweils spezifisch festgelegt, die Beschreibung können wir so lassen, wie sie ist und den Package-Namen liegen wir ebenfalls so fest, wie wir uns das vorstellen. Ein Klick auf "Next" führt uns auf die nächste Seite und hier wählen wir unsere Abhängigkeiten aus. Zum einen ist es die Web-Abhängigkeit und zum andern, weil so ein Service auch Daten speichern soll, wählen wir Spring Data JPA als Abhängigkeit aus, klicken auf "Finish" und lassen uns alles Notwendige generieren. Es dauert jetzt ein paar Sekunden bis die entsprechenden Komponenten heruntergeladen worden sind, danach wird das Projekt im Eclipse angelegt und sobald das erledigt ist, können wir einmal einen Blick darauf werfen, was wir jetzt hier in unserer Applikation schon haben. Wir schauen zu diesem Zweck zunächst einmal in die Datei "pom.xml". Und hier sehen wir uns die Dependencies an und wir haben drei Dependencies drin "spring-boot-starter-data-jpa", das benötigen wir für den Datenzugriff und "spring-boot-starter-web", das ist die eigentliche Spring-Boot-Applikation und "spring-boot-starter-test" ist für Test-Komponenten. Wir müssen nun noch einige wenige weitere Abhängigkeiten hinzufügen, zunächst einmal benötigen wir die Abhängigkeit für Hibernate. Die Group-Id ist "org.hibernate" und die Artifact-Id ist "hibernate-core", dann fügen wir mit der selben Group-Id, also "org.hibernate" den sogenannten "hibernate- entitymanager" hinzu. Und zuletzt benötigen wir noch eine Abhängigkeit, für die von uns verwendete Datenbank. Wir verwenden in diesem Beispiel die H2 Datenbank, das ist eine In-Memory-Datenbank, sodass wir keine spezielle Software installieren müssen. Jetzt verfügt unsere Applikation über alle notwendigen Abhängigkeiten, sobald wir auf "Speichern" klicken, können wir die Applikation updaten, per Rechtsklick "Maven" "Update Project" und dann werden alle notwendigen Abhängigkeiten einmal heruntergeladen und bereitgestellt, es gibt keinen Fehler. Das bedeutet, dass unsere Applikation grundsätzlich einsatzfähig sein dürfte. Nun widmen wir uns den Daten, die wir verwalten wollen. In einem Gästebuch sollen üblicherweise Gästebucheinträge gespeichert werden. So ein Gästebucheintrag wird repräsentiert über eine einzelne Klasse in unserem Code. Wir legen zu diesem Zweck im Pagacke "de.applicity.guestbook" eine entsprechende Klasse an, wir nennen sie "GuestbookEntry". Eine Entität, die in der Datenbank gespeichert wird verfügt stets über die Entity-Annotation, und zwar aus dem javax.persistance-Package. Ebenfalls verfügt sie über einen Primärschlüssel, der ist in Form einer privaten Member-Variable ausgeführt, verfügt über die Annotation "id" aus dem javax.persistance-Package und verfügt darüber hinaus über eine GeneratedValue-Annotation, die Auskunft darüber gibt, wie diese Komponente ihren Wert erhält, über die sogenannte Generierungsstrategie und hier wählen wir die Generierungsstrategie mit dem Namen "AUTO" aus und das bedeutet, dass der jeweils für die Datenbank am besten geeignete Ansatz gewählt wird. Dann hinterlegen wir für unser Gästebuch einige wenige weitere Eigenschaften, nämlich den Titel eines Gästebucheintrags, dann den eigentlichen Eintrag und den Namen des Eintragenden. Ebenfalls fügen wir noch ein Datum hinzu und das soll das aktuelle Datum sein. Zuletzt lassen wir uns alle benötigten Getter und Setter per Rechtsklick in die Klasse und Auswahl von "Source" "Generate Getters and Setters" aus dem Kontextmenü generieren. Und damit haben wir diese Entität fertig definiert. Ein Klick auf "Speichern" speichert sie und nun kann sie schon verwendet werden. Um die Daten, die wir lesen und schreiben wollen, dann tatsächlich in eine Datenbank zu bekommen und sie auch aus der Datenbank wieder herauszuladen, benötigen wir eine Datenzugriffsschicht. So eine Datenzugriffsschicht ist mit Hilfe von Spring Boot beziehungsweise von Spring Data sehr einfach geschrieben. Wir fügen im Package unser Applikation per Rechtsklick "New" "Interface" ein neues Interface hinzu und wir nennen dieses Interface "GuestbookRepository" und legen es einfach an. Dieses GuestbookRepository erbt von einem schon existierenden Repository, und zwar von einem JpaRepository. Dieses JpaRepository wird uns von Spring Data bereitgestellt und da müssen wir zwei Parameter angeben, nämlich als ersten Parameter die Klasse, die wir verwalten wollen, das ist die Klasse "GuestbookEntry" und der zweite Parameter ist der Typ des Primärschlüssels, das war "Long". Nachdem wir das angelegt haben, sind wir schon fertig mit dem Programmieren unser Datenbankzugriffsschicht, denn das JpaRepository erlaubt es uns über notwendige CRUD-Funktionalitäten, also Create, Read, Update, Delete, direkt verfügen zu können, ohne dass wir diese schreiben müssen, die werden einfach automatisch angelegt zur Laufzeit. Um unsere Applikation nun tatsächlich lauffähig zu machen fehlt eigentlich nur noch eines: Eine Komponente, mit der andere Komponenten dann tatsächlich interagieren können und das ist der sogenannte Rest-Controller Der Rest-Controller ist auch wieder eine Klasse, die wir anlegen und wir nennen diese Klasse "GuestbookController". Dieser GuestbookController erhält zwei Annotationen, nämlich zum einen die Controller-Annotation, damit wird dem Spring Framework klargemacht, hier können HTTP-Requests landen und zweite Annotation ist die RequestMapping-Annotation, die nämlich Auskunft darüber gibt über welchen virtuellen Pfad dieser Controller erreichbar ist. Dieser Controller erhält intern eine Instanz unseres "GuestbookRepositories", also der Datenspeicher und Ladeklasse, und zwar in der VariablenRepository. Und wir lassen uns hier mit Hilfe der Autowired-Annotation die entsprechend automatisch bereitgestellte und implementierte Instanz zuweisen. Nun wollen wir eine Methode bereitstellen, mit deren Hilfe wir in der Lage sind alle Gästebucheinträge wieder abzurufen. Das machen wir, indem wir eine Methode anlegen, die ist öffentlich sichtbar, Rückgabetyp ist "ResponseEntity" von einem beliebigen Typ und die Methode heißt "getEntries". Und innerhalb der Methode müssen wir zwei Schritte machen, nämlich erstens die Daten laden und zweitens die Daten zurückgeben. Das Laden der Daten geschieht indem wir eine java.util List vom Typ "GuestbookEntry" als Variable anlegen und uns die Werte aus der Methode "findAll" des Repositories einfach geben lassen. diese Funktionalität wird uns von Spring Data JPA automatisch bereitgestellt. Und der noch folgende letzte Schritt ist dann das Ganze zurückzugeben. Das machen wir, indem wir die statische Methode "ok" der "ResponseEntity" Klasse aufrufen und dieser Methode unsere geladenen Daten als Parameter übergeben. Jetzt fehlt eigentlich nur noch eine Kleinigkeit, nämlich eine RequestMapping-Annotation, auf Ebene dieses Eintrags. Der erste Schlüssel, den wir setzen ist Value und damit geben wir an, über welchen virtuellen Pfad innerhalb des Guestbook-Controllers diese Methode aufgerufen werden kann. Der zweite Parameter, den wir hier angeben ist Methode "Method" und hier geben wir die HTTP-Zugriffsmethode "GET" an, das bedeutet, dass jeder Browser einfach durch Aufrufen sich die entsprechenden Daten holen kann und wir geben mit Hilfe von "produces" an, dass die Rückgabe vom Typ "JSON" ist, der Wert, den wir hier angeben ist "APPLICATION_JSON_VALUE". Damit haben wir eine Methode geschaffen, mit deren Hilfe wir alle hinterlegten Einträge wieder abrufen können. Daneben benötigen wir nun noch eine Methode, mit der wir Datensätze anlegen können. Diese Methode ist ebenfalls eine Methode mit dem Rückgabetyp "ResponseEntity" und sie heißt "create". Sie bekommt als Parameter eine fertige GuestbookEntry-Instanz übergeben und diese GuestbookEntry-Instanz muss natürlich vom Client, also von der aufrufenden Komponente kommen und diese muss diese Instanz im Body seiner Anforderung übertragen, das heißt, nicht in der Adresszeile, sondern eben in dem, was der Browser nutzen kann, um beispielsweise auch Dateien hochzuladen. Nachdem wir dann hier die Daten erhalten haben, werden wir zunächst einmal den Datensatz speichern und danach den gespeicherten Datensatz zurückgeben. Das Speichern machen wir wieder mit Hilfe des Repositories, und zwar rufen wir beim Repository die Methode "save" auf und übergeben ihr die uns übergebene Instanz als Parameter, wir lassen sie auch in dieselbe Variable wieder zurückgeben, denn beim Speichern wird automatisch das Datum gesetzt und es wird ebenfalls der Primärschlüssel festgelegt, und oben das den Client dann auch zu signalisieren, geben wir haben die so manipulierte Instanz wieder zurück damit kann der Client, dann nämlich gleich auf die entsprechenden Daten zugreifen. Jetzt fehlt lediglich noch die Angabe, auf welchen Pfad diese Methode hört, das machen wir mit Hilfe der RequestMapping-Annotation, und wir lassen sie auf denselben Pfad lauschen, wie die Methode "getEntries", allerdings legen wir fest, dass die HTTP-Methode, die zu verwenden ist, die HTTP-Request Methode "PUT" ist. "PUT" wird üblicherweise verwendet, um neue Datensätze anzulegen. Und wir legen ebenfalls fest, dass die Rückgabe vom Typ "APPLICATION_JSON" ist und dass auch die Daten, die reinkommen, vom Typ "APPLICATION_JSON" sein sollen. Damit haben wir an der Stelle eine ganz klassische RESTful-Services-Methode geschrieben, JSON kommt rein, JSON geht raus und intern werden die Daten verarbeitet. Damit ist unser Controller auch abgeschlossen und unser Applikation ist einsatzfähig. Damit haben wir den Controller auch abgeschlossen und unser Applikation in einen arbeitsfähigen Zustand versetzt, denn wir sind nun in der Lage HTTP-Requests in Form von RESTful-Services zu verarbeiten. Wir haben zwei Methoden angelegt, nämlich die Methoden "getEntries" und "Create", die beide auf den virtuellen Pfad "/Guestbook/" lauschen. Wir haben eine Repository-Implementierung bereitgestellt in Form des Guestbook Repositorys und wir haben eine Entität angelegt, nämlich die GuestbookEntry-Klasse, die in diesem Repository gespeichert wird. Ebenfalls haben wir alle benötigten Abhängigkeiten hinterlegt und natürlich ganz am Anfang das Projekt erstmal als eine Spring-Boot-Applikation, mit den beiden Abhängigkeiten auf WEB und JPA aufgesetzt.

Microservices mit Spring Boot

Sehen Sie, wie moderne Applikationen für Cloud-Umgebungen entstehen.

2 Std. 14 min (12 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!