Java EE 7: Web Services

RESTful Service

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Der RESTful Service stellt die Schnittstelle zwischen Datenschicht und den Clients dar. Hier definieren Sie den RESTful Service, konfigurieren die Applikation und ergänzen die Entitäten Customer und Address.

Transkript

Wenn wir unterschiedliche Clients mit der Applikation interagieren lassen wollen, also Webapplikation oder mobile Applikationen oder von mir aus auch Java-Clients, dann benötigen wir eine Schnittstelle, die in der Lage ist, die Daten ohne jedes Markup und ohne jeden Overhead zurückzugeben, und die auf der anderen Seite dafür sorgt, dass keiner der Clients direkt mit der Datenbank interagieren kann. Diese Schnittstelle stellt der RESTful Service dar. In diesem Video werden wir uns mit der Implementierung des RESTful Service befassen. Der RESTful Service, den wir schreiben werden, ist dafür zuständig, dass der Client Zugriff auf die Datenbank bekommt. Allerdings nicht direkt, sondern nur über die Methoden, die ihm der RESTful Service anbietet. Die werden einigermaßen deckungsgleich sein mit den Methoden der Datenlogikschicht, allerdings sind es eben Extramethoden und sie können auch spezifisch implementiert werden, also zusätzliche Schutzfunktionalitäten oder ähnliches beinhalten. Das ist in unserem Fall nicht der Fall, aber wir wollen uns die Möglichkeit offenhalten. Der RESTful-Service selber ist in der EJB-Schicht definiert. Er ist tatsächlich sogar eine Stateless Session Bean und seine Aufgabe ist tatsächlich, die enge Interaktion mit der Datenschicht. Zu diesem Zweck wird ihm auch die Datenschicht injiziert werden. Sehen wir uns nun an, wie wir den RESTful Service definieren und implementieren und die Applikation dafür konfigurieren können. Wie bereits erwähnt, ist der RESTful Service eine Stateless Session Bean. Wir legen also in unserem Projekt eine neue Stateless Session Bean an und das ist eine ganz normale Java-Klasse, die befindet sich im Package de.video2brain.customers.beans und hat den Namen CustomerManagementService. Sie ist wie gesagt eine Stateless Session Bean und damit ist sie dann auch schon grundsätzlich bekannt gemacht. Nun machen wir sie bekannt als ein RESTful Service Endpoint, indem wir die Path-Annotation setzen und sagen der lokale Pfad ist Customers und können uns nun die CustomerManagementBean, also die Datenzugriffsschicht hier initiieren lassen. Und dass machen wir mit Hilfe der @EJB-Annotation. Damit haben wir jetzt auch eine Referenz da drauf. Nun können wir die benötigten Methoden implementieren. Die erste Methode ist eine Methode, die uns eine Liste von Typ BaseCustomerData zurückgeben wird. BaseCustomerData ist ein DataTransferObject und die heißt getCustomers und sie gibt mit Hilfe der CustomerManagementBean und deren Methode getAllCustomers die entsprechenden Daten zurück. Sie ist erreichbar über einen GET Request. Der Pfad ist "all", also CustomersAll und die Rückgabe ist im Format ausgedrückt über die produces-Annotation. Wichtig bitte beachten, aus dem Jaxax.ws.rs.-Package ist im Format Application JSon das können wir über MediaType.APPLICATION.JSON angeben. Damit haben wir schon die Rückgabe aller Kunden implementiert. Nun können wir uns um die Rückgabe eines einzelnen Kunden kümmern. Hier geben wir diesmal keine DataTransferInstanz sondern eine normale Instanz der Klasse Customer zurück. Die Methode heißt getCustomer und wir übergeben dort die id des Customers, die wir haben wollen. Das was wir zurück geben wollen, also eine Customer-Instanz, ermitteln wir mit Hilfe der CustomerManagementBean und deren Methode getCustomer, die genau die übergebene Id übergeben bekommt. Und dann geben wir das Ergebnis auch entsprechend zurück. Diese Methode ist ebenfalls über die GET-Annotation als eine Methode gekennzeichnet, die per HTTP GET aufrufbar ist. Der Pfad beinhaltet einen Platzhalter, nämlich den Platzhalter "id", die Rückgabe aller Methoden übrigens ist von MediaType.APPLICATION.JSON und den Pfadparameter, den wir hier definiert haben, im Pfad, den spielen wir ein über die PathfParam-Annotation und lassen das entsprechende Feld id daran gebunden werden. Die nächste Methode ist die Methode updateCustomer. Auch hier ist die Rückgabe eine Instanz vom Typ Customer. Und hier bekommen wir auch eine Customer-Instanz als Parameter übergeben und wir rufen auf Ebene der CustomerManagementBean die Methode updateCustomer auf. Diese Methode wird per PUT-Request erreicht. Ausgedrückt über die @PUT-Annotation. Der Pfad ist "update" und auch sie generiert JSON als Rückgabe. Die vorletzte Methode, die wir noch implementieren müssen, ist die Methode createCustomer. Auch hier geben wir eine Customer-Instanz hinein. Und rufen die entsprechend gleichnamige Methode der CustomerManagementBean auf. Create hat anders als update den HTTP-Zugriffstyp POST, der Pfad ist create und auch hier ist die Rückgabe vom Rückgabetyp MediaType.APPLICATION.JSON. Zuletzt noch die Methode deleteCustomer. Die hat keine Rückgabe. Und hier bekommen wir die CustomerId übergeben und wir rufen dann die Methode deleteCustomer der ManagementBean auf. zugriff hier, ist die HTTP-Methode delete und der Pfad heißt delete und auch dort haben wir einen Pfad Parameter, nämlich die id des Datensatzes den wir löschen wollen, deswegen fügen wir hier dann auch vor dem Methoden-Parameter die PathPam-Annotation ein und verweisen dort ebenfalls auf das Feld id. So, damit ist der RESTful Service soweit fertig gestellt, also wir können jetzt RESTful arbeiten, allerdings würde dieser RESTful Service jetzt noch nicht gestartet werden, denn wir müssen noch die Applikationskonfiguration schreiben. Diese Applikationskonfiguration hinterlegen wir in einem eigenen Package und zwar de.video2brain.customers.config und hier legen wir eine Klasse an. Der Name dieser Klasse ist völlig egal, wir nennen sie CustomerManagementConfig und diese Klasse erhebt von der Basis-Klasse Application aus dem Javax.ws.rs core-Package und hier fügen wir nun die @ApplicationPath Annotation hinzu, die wir angeben müssen, um den Basis-Pfad zu definieren. Und das ist api/v1 und nun ist konfiguriert, dass der gesamte Pfad zum RESTful Service immer heißen wird api/v1/Customers und dann werden die entsprechenden Methoden halt aufgerufen. Damit haben wir den RESTful Service soweit fertig. Eine kleine Änderung werden wir noch an den Address und Customer-Entitäten vornehmen müssen, denn wie bereits erwähnt, ist es so, dass wir ja JSON austauschen. Das ist ja Sinn und Zweck der Arbeit eines RESTful Services. Eine Web-Application kann nun aber die Felder, die über JSON hin und herkommen, manipulieren. Sie kann zusätzliche Felder einfügen, sie kann gegebenenfalls auch Felder entfernen. Zusätzliche Felder können ein Problem aufwerfen und aus diesem Grund annotieren wir nun auf Ebene von Address und Customer-Annotationen, dass zusätzliche Felder einfach ignoriert werden können. Zu diesem Zweck haben wir bereits einen Verweis auf die Jackson-Annotations 2.4.0.Jar.api unserem Projekt hinzugefügt und nehmen nun eine Jackson-Annotation nämlich JSON, IgnoreProberties und setzen die auf Ebene der Address und auf Ebene der Customer-Klassen. @JsonIgnoreProperties und da setzen wir das Attribut ignoreUnknown mit dem Wert true. Das machen wir bei Address und bei Customer. Und nun sind wir tatsächlich fertig in Bezug auf den RESTful Service. In diesem Video haben wir den RESTful Service für unsere Kundenverwaltungsapplikation aufgesetzt und wir haben die Applikation entsprechend konfiguriert. Ebenfalls haben wir die Customer- und Address-Entitäten noch so konfiguriert, dass sie eventuelle unbekannte Felder im übergebenden JSON ignorieren.

Java EE 7: Web Services

Steigen Sie ein in die Java-Enterprise-Welt und lernen Sie, wie Nachrichten ausgetauscht und Dienste definiert werden.

5 Std. 13 min (30 Videos)
Das ist leider keine echte RESTful API
Anonym

1. Die Methoden der Restschnittstellen sollten nicht auch noch @Path Annotationen haben. Z.B. erübrigt sich @Path("all"). Siehe Wikipedia Rest. Siehe andere API's von Facebook oder Git. 2. Ein Post Request sollte die Location zurückgeben. 3. Generell fehlen alle Response Code's. 200, 201, 400, 401, 403, 204 ... etc. Auch eine Erklärung dazu währe auch wünschenswert. 4. Man sollte Maven verwenden. Schade, ansonsten finde ich das Training nicht schlecht.

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!