RESTful Web-Services mit JAX-RS



Ähnliche Dokumente
RESTful Web. Representational State Transfer

WebService in Java SE und EE

Auszug aus JAX-WS Folien

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Wiederholung: Beginn

EJB Beispiel. JEE Vorlesung 10. Ralf Gitzel

SAP NetWeaver Gateway. 2013

Erstellung eines Frameworks für Shop Systeme im Internet auf Basis von Java

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, Java Forum Stuttgart 2007

Der lokale und verteilte Fall

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Web-Konzepte für das Internet der Dinge Ein Überblick

Flash, Network und Facebook. Steven Mohr

SE2-10-Entwurfsmuster-2 15

Lokale Installation von DotNetNuke 4 ohne IIS

Java und XML 2. Java und XML

5. Programmierschnittstellen für XML

Enterprise Applikation Integration und Service-orientierte Architekturen. 09 Simple Object Access Protocol (SOAP)

Struts 2 Das Imperium schlägt zurück?

Anleitung zur Webservice Entwicklung unter Eclipse

5. Programmierschnittstellen für XML

Application Frameworks

Design Patterns 2. Model-View-Controller in der Praxis

Java Web Services Metadata JSR-181

Automatisiertes Testen von Java EE-Applikationen mit Arquillian

Installation von NetBeans inkl. Glassfish Anwendungs-Server

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Windows Server 2012 R2 Essentials & Hyper-V

Aktuelle Technologien zur Entwicklung verteilter Anwendungen RESTful Web Services mit JAX-RS

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

REST: Eine leichtgewichtige und einfachere Alternative zu Web Services. W3L AG

Inhaltserzeichnis. Datenübernahme

Programmers Manual Geodaten Ver. 2.0

MARCANT - File Delivery System

Contexts and Dependency Injection. W3L AG

Eine Anwendung mit InstantRails 1.7

Step by Step Webserver unter Windows Server von Christian Bartl

Dirk von der Weiden, Olaf Meyer C1 SetCon. REST in the Enterprise

Internet und WWW Übungen

Java Enterprise Architekturen Willkommen in der Realität

Übungen zu Softwaretechnik

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Web Services stellen eine Integrationsarchitektur dar, die die Kommunikation zwischen verschiedenen Anwendungen

Softwareentwicklung mit Enterprise JAVA Beans

Webseiten sind keine Gemälde. Webstandards für ein besseres Web. Webstandards für ein besseres Web

Downloadfehler in DEHSt-VPSMail. Workaround zum Umgang mit einem Downloadfehler

Schritte 4. Lesetexte 13. Kosten für ein Girokonto vergleichen. 1. Was passt? Ordnen Sie zu.

Workflow, Business Process Management, 4.Teil

WLAN Konfiguration. Michael Bukreus Seite 1

Konfiguration VLAN's. Konfiguration VLAN's IACBOX.COM. Version Deutsch

Integration von Web Services in J EE Anwendungen mit XFire. 1/26 André Janus - Integration von Web Services in J EE Anwendungen mit XFire

Dokumentenmanagement als Dienst (DMS as a Service, DaaS)

Webservices. 1 Einführung 2 Verwendete Standards 3 Web Services mit Java 4 Zusammenfassung. Hauptseminar Internet Dienste

GSM: Airgap Update. Inhalt. Einleitung

Internetanbindung von Datenbanken

Java: Vererbung. Teil 3: super()

Online-Publishing mit HTML und CSS für Einsteigerinnen

Programmierung von Client/Server- Anwendungen

Motivation. Inhalt. URI-Schemata (1) URI-Schemata (2)

Webalizer HOWTO. Stand:

Was ist LDAP. Aufbau einer LDAP-Injection. Sicherheitsmaßnahmen. Agenda. LDAP-Injection. ITSB2006 WS 09/10 Netzwerkkonfiguration und Security

AJAX DRUPAL 7 AJAX FRAMEWORK. Was ist das Ajax Framework? Ein typischer Ablauf eines Ajax Requests Die Bestandteile des Ajax Frameworks.

LDAP Konfiguration nach einem Update auf Version 6.3 Version 1.2 Stand: 23. Januar 2012 Copyright MATESO GmbH

Wireless LAN PCMCIA Adapter Installationsanleitung

Die Post hat eine Umfrage gemacht

COMPUTER MULTIMEDIA SERVICE

Haben Sie schon einmal aus einem ScreenCobol Requestor ein Java Programm aufgerufen?

Verwendung der PayJoe -API zum externen Upload von Belegen und Zahlungen

Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen.

Ein neues Outlook Konto können Sie im Control Panel über den Eintrag Mail erstellen.

Einführung in die Java- Programmierung

Proxy. Krishna Tateneni Übersetzer: Stefan Winter

Implementierung von Web Services: Teil I: Einleitung / SOAP

Also heißt es einmal mehr, immer eine eigene Meinungen bilden, nicht beeinflussen lassen, niemals von anderen irgend eine Meinung aufdrängen lassen.

Professionelle Seminare im Bereich MS-Office

ITT WEB-Service DEMO. Kurzbedienungsanleitung

Themen. Anwendungsschicht DNS HTTP. Stefan Szalowski Rechnernetze Anwendungsschicht

Albert HAYR Linux, IT and Open Source Expert and Solution Architect. Open Source professionell einsetzen

Reporting Services und SharePoint 2010 Teil 1

Web Sockets mit HTML5. Quelle:

Spring Dynamic Modules for OSGi Service Platforms

1. Zugriff auf das Lonza Netzwerk von ihrem privaten PC oder von einem Internet Café

Seite 1 von 14. Cookie-Einstellungen verschiedener Browser

4D Server v12 64-bit Version BETA VERSION

Avira Server Security Produktupdates. Best Practice

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Info zum Zusammenhang von Auflösung und Genauigkeit

Bedienungsanleitung: Onlineverifizierung von qualifiziert signierten PDF-Dateien

Wichtige Hinweise zu den neuen Orientierungshilfen der Architekten-/Objektplanerverträge

Auswertung des Fragebogens zum CO2-Fußabdruck

Transkript:

JUG Stuttgart RESTful Web-Services mit JAX-RS 30. Oktober 2014 Alter Scheuer, Stuttgart-Degerloch Markus KARG (Expert Group JSR 339, 370 / JAX-RS 2.0, 2.1)

Agenda Was ist nur so toll an diesem REST? JAX-RS Schon wieder eine neue API! Echtes REST mit JAX-RS Die Zukunft von JAX-RS, EJB & Co. Java EE 8 Big Picture

Was ist nur so toll an diesem REST? Copyright 2009-2014 Markus Karg, Pforzheim

Was ist ein Web-Service? Maschine Irgend ein Programm HTTP GET, PUT, POST, DELETE z. B. XML JSON WebServer WWW Mensch Browser HTTP GET, POST z. B. HTML PDF WebServer

Vorteile Alles kann mit allem reden, ohne die Anwendungen nennenswert zu ändern. Global und seit Jahrzehnten etablierte Standards (vgl. idocs, CORBA, Treiber) [URL, HTTP, MIME, UTF-8, XML/JSON] Lose Kopplung (nur miteinander reden, nicht miteinander verheiraten) Bestehende Infrastruktur unterstützt uns optimal (Firewalls, Caching, Security) Lingua Franca für M2M

Ketzerische Thesen Mehr Clients Mehr Server: Nicht-linear skalierbar O(n 2 )! Non-RESTful Web-Services bilden einen unnötigen Layer oberhalb HTTP...sind oftmals proprietär und erfinden für alles das Rad neu...sind sehr komplex ( CISC-Style ) und oftmals schwer zu verstehen...sind wenig objekt-orientiert, meist RPC oder CRUD...sind meist schwierig zu analysieren, wenn sie klemmen...und bergen viele weitere kleine und große Probleme!...wieso also nicht reines HTTP?

Ketzerische Antithesen Das WWW ist Prototyp der idealen Software-Architektur! Nicht Menschen surfen im WWW sondern Maschinen Nicht HTML wird geliefert sondern XML oder JSON Nicht Buttons bieten Aktionen an, sondern Link-Header Internet WWW der Dinge

REST Representational State Transfer [Fielding, 2000] Resource = Ampelanlage an einer Kreuzung Representational State = Ein XML- oder JSON-Dokument mit der Information, welche Ampel gerade welche Farbe zeigt Die Zusendung des Dokuments an die Steuerung schaltet die Farben der einzelnen Ampeln aus der Ferne. REST ist ein Paradigma, keine Technologie. Adressierbare Ressourcen {+ verhandelbares Datenformat} + Verben + Zustandslosigkeit + HATEOAS Speziell im Web: URL {+ MIME} + HTTP + Matrix-Params + Link-Header HATEOAS Hypermedia As The Engine Of State: Status des Maschine-Maschine-Dialogs steckt in der Nachricht selbst, nicht im Client und auch nicht im Server. (http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm)

REST ist toll! Unbegrenzte Skalierbarkeit Jeder Server bringt zusätzliche Leistung Mehr Clients pro Server da kein Status auf dem Server Kein SPOF; Reboot und Neuinitialisierung eines beliebigen Servers Wir müssen nichts neues lernen, wir machen einfach das WWW nach! Firewalls, Caches, Sicherheit... geschenkt! Mitlesen der Kommunikation im Klartext wenn's klemmt 1:1-Zuordnung von HTTP-Aufrufen zu Aktionen Keine spezielle Software-Unterstützung nötig......und wozu braucht man dann dieses JAX-RS?!

Schon wieder eine neue Java-API...! :-(

JAX-RS vs JAX-WS/RPC JAX-WS, JAX-RPC SOAP, meist Remote Procedure Call, meist stateful, WS-Darkstar, schwergewichtig und komplex JAX-RS REST/HTTP, stateless, leichtgewichtig und simpel

JAX-RS vs Servlet API Servlet-API Ersatz für CGI und ISAPI/NSAPI, entbindet Java-implementierte Server-Extensions von der Kenntnis der zugrundeliegenden, nativen Server-API (Bottom-Up, Technologie- Wrapper). Vereinheitlicht Web-Server-Produkte (z. B. Apache, IIS). JAX-RS Erleichtert das Schreiben von RESTful Web Services in Java (Top-Down, Anwendungs- Framework) durch Abstraktion des Domänenmodells von der Technik. Vereinheitlicht Java-REST-Frameworks (z. B. Jersey, Apache CXF).

JAX-RS vs JSF Java Server Faces Zum Schreiben von Anwendungen mit Web-Oberfläche (für Menschen). GUI-zentrisch. JAX-RS Zum Schreiben von Web Services (für Maschinen). Domänenmodell im Zentrum.

REST Maturity Model 0 SOAP oder RPC/XML Einzelne URI für gesamten Service Einzelnes HTTP-Verb für alle Aktionen 1 + Natives HTTP + Verschiedene URIs für getrennte Ressourcen 2 + Verschiedene HTTP-Verben (DELETE, OPTIONS, HEAD...) 3 + HATEOAS (Hypermedia-Navigation)... Basics seit JAX-RS 2.0 http://martinfowler.com/articles/richardsonmaturitymodel.html Copyright 2009-2014 Markus Karg, Pforzheim

JAX-RS-Universum JAX-RS Container hostet eine JAX-RS-Anwendung (= Web Application) Web Application besteht aus Web Resources und Extensions (Filter, Provider, etc.) Automatisches Finden und Montieren der Anwendung, lose Bindung Starke Erweiterbarkeit durch klar definierte Schnittstellen innerhalb des Containers IoC, POJOs, deklarative Programmierung mittels Annotations Context and Dependency Injection Domänen-orientiert, automatische Codierung/Dekodierung Unabhängig von Servlets / JSF

Echtes REST mit JAX-RS

Adressierbarkeit curl http://.../banking/api/konten/de00123456812345678 @Path("konten/{iban}") public class Konto { } @PathParam("iban") private IBAN iban; Konto und IBAN sind Objekte, keine Strings! Wir kümmern uns nicht um deren Erzeugung!

Verhandelbares Datenformat curl -H "Accept: application/xml;application/json" --data "Markus Karg" http://.../banking/api/konten @POST public Eroeffnungsbestaetigung kontoeroeffnen(eroeffnungsantrag antrag) { String neuekontonummer = "1234567"; String kontoinhaber = antrag.getantragsteller(); return new Eroeffnungsbestaetigung(neueKontonummer, kontoinhaber); } @Produces(APPLICATION_XML) public class JaxbWriter implements MessageBodyWriter<Object> { } XML wird über JAXB (noch) automatisch unterstützt JSON wird in den meisten Produkten automatisch unterstützt

Zustandslosigkeit curl http://.../banking/api/konten/de00123456812345678;monat=mai;von=15;bis=21 @Path("konten/{iban}") public class Konto { @PathParam("iban") private String iban; } @GET public Kontoauszug kontoauszugabrufen( @MatrixParam("monat") Monat monat, @MatrixParam("von") int von, @MatrixParam("bis") int bis) { return new Kontoauszug(iban, monat, von, bis); } Zustand wird automatisch aus dem Request hergestellt Zustand (Monat) ist ein Objekt, kein String!

Verben curl -X DELETE http://.../banking/api/konten/de00123456812345678 @Path("konten/{iban}") public class Konto { @PathParam("iban") private IBAN iban; } @DELETE public Kuendigungsbestaetigung kuendigen() { return new Kuendigungsbestaetigung(iban); } Verben sind Annotations HTTP (nahezu) vollständig enthalten Beliebige eigene Verben möglich (z. B. MOVE)

HATEOAS @POST public Response betragabheben(@context UriInfo uri) { Link.Builder b = Link.fromUri(uri.getPath()); Link self = b.rel("self").build(); Link kontoauszugabrufen = b.rel("kontoauszug").build(); Link kuendigen = b.rel("kuendigen").build(); Link betragabheben = b.rel("abheben").build(); ResponseBuilder r = Response.ok().links(self, kontoauszugabrufen, kuendigen); if (saldo.compareto(zero) > 0) r.links(betragabheben); return r.build(); } < HTTP/1.1 200 OK < Server: Apache-Coyote/1.1 < Link: <konten/de1234>; rel="self" < Link: <konten/de1234>; rel="self kontoauszug" < Link: <konten/de1234>; rel="self kontoauszug kuendigen" < Link: <konten/de1234>; rel="self kontoauszug kuendigen abheben" < Content-Length: 0 < Date: Wed, 16 Jul 2014 20:42:22 GMT verbesserungswürdig

JAX-RS Features Vollständig typisiert, Anwendung ist von Technik isoliert Kein Hantieren mit Strings, Streams oder HTTP HTTP/1.1 incl. ETags und Conditional Requests zur Leistungserhöhung Separation of Concerns (Anwendungsdomänen-POJOs Datenstrom-Ebene) Auto Discovery, Konfigurations-API (Properties injizieren und ändern), CDI Dynamic Sub-Resources Mapping (z. B. Wenn dann Pfad auf Resource A mappen, sonst auf Resource B ) HTTP-Headers POJOs Providers Entity Providers (MBR, MBW), viele Standard-Provider u. a. JAXB, JSON Content Negotiation Context Resolvers (z. B. JAXBContext) Exception Mapping Providers (Exception HTTP-Status-Code) WebApplicationException Security Bean Validation API Asychronous Programming (Multi-Fiber-Support verbesserte Skalierung) Client API (Wiederverwendbare Session und vorbereitete Aufruf-Templates) Static & Dynamic Filters (Datenstrom-Ebene) und Interceptoren (Java-Objekte) für Caching, Compression, etc. HTTP-basierte Anwendungs- Infrastruktur

Resources JAX-RS 2.0 Specification PDF and JavaDocs https://jcp.org/aboutjava/communityprocess/final/jsr339/index.html JAX-RS 2.0 JavaDocs Online https://jax-rs-spec.java.net/nonav/2.0/apidocs/ JAX-RS 2.0 Reference Implementation (Jersey) https://jersey.java.net/ Maven GAV Coordinates: <groupid>javax.ws.rs</groupid> <artifactid>javax.ws.rs-api</artifactid> <version>2.0</version> Adopt JAX-RS! markus@headcrashing.eu

Die Zukunft von Java EE We plan to enhance the managed bean model to make ease of use features that are currently available only to selected components available to all managed beans via the mechanisms provided by CDI. (JSR 366 / Bill Shannon et al.)

Die Zukunft von Java EE Auf lange Sicht nur noch ein Container und ein Bean-Typ (i. S. Cloud-POJO ) EJB i. S. JAX-WS, Stateful Beans, JRMI und IIOP stirbt aus (IIOP, EJB 2 optional in EE 8) Aus EJB-Typen (TX, Timers, MDB, Resource-Access) werden hinzufügbare Fähigkeiten Aufsplittung in reines REST und MVC API Gemeinsame Infrastruktur in Diskussion Zielarchitektur: Lightweight Cloud : JAX-RS + CDI-annotierte Fähigkeiten

Die Zukunft von Java EE Java EE = JAX-RS + CDI + Injectable Features MVC = JAX-RS 2.0 Non-REST + JSF 2.2 Facelets & Flows JAX-RS 2.1 = JAX-RS 2.0 - MVC JSF 2.3 = JSF 2.2 - MVC MVC API's JAX-RS-Basis ist noch spekulativ!

Die Zukunft von JAX-RS Server-Sent Events: Der Todesstoß für JMS und AMQP? Weniger JAX-RS-Annotations, mehr CDI! Deklarative Sicherheit (Java EE) Nicht-blockierende Filter, reactive Client API JAXB wird optional JSONB API vermutlich zwingend Verbessertes HATEOAS (mehr REST) JAX-Resources = MVC-Controller

Die Zukunft von EJB Das EJB-Team bei Oracle existiert allem Anschein nach nicht mehr. Führende Mitarbeiter des EJB-Teams wurden anderen Teams zugeordnet. Oracle wird ein Team formieren, sollte es eine Notwendigkeit für eine neue EJB-Version geben. (Reza Rahman, Oracle) Es gibt bis heute keinen JSR für eine neue EJB-Version.

Die Zukunft von JSF...the scope of new features is intentionally limited......the set of issues addressed is very much up to what the expert group is willing to contribute... (JSR 372, Edward Burns et al.) Interpretation: Oracle hat nicht vor, neue Features in nennenswertem Umfang beizusteuern. Wenn die Community ein Feature vorschlägt, soll sie es auch gleich programmieren!

Q & A