rest – grundlagense.uni-hannover.de/priv/lehre_2010sommer_ · – konflikt bei gleichzeitigem...
Post on 15-Aug-2019
239 Views
Preview:
TRANSCRIPT
REST – Grundlagen
Seminar „Aktuelle Software-Engineering-Praktiken für das World Wide Web“
Olga Liskin<olga.liskin@gmail.com>
Olga Liskin: REST - Grundlagen 205.05.2010
Übersicht
• Motivation, Einführung• Architekturstil REST• RESTful Webservices• Patterns, Anti-Patterns• Software Engineering und REST• Code-Beispiele• Zusammenfassung
Olga Liskin: REST - Grundlagen 305.05.2010
Einführung
• Erfolg des Web untersuchen• Dissertation von Roy Fielding
– Relevante Faktoren für Web-Systeme aufschreiben– Herangehensweise: Abstraktion zum Architekturstil
• Resultat: Prinzipien für gute Systeme im WWW– Verwendung beim Festlegen von Server-Komponenten und APIs
Olga Liskin: REST - Grundlagen 405.05.2010
Motivation
• Vielfältiges Web– Webseiten– „Programmable Web“– Mobile Applikationen
• Viele Service APIs– Viele bezeichnen sich als RESTful– Doch: welche sind wirklich gut?– Wie kann man wirklich gute Systeme bauen?
Quelle: http://maps.google.deQuelle: http://twitter.com
Olga Liskin: REST - Grundlagen 505.05.2010
Der Begriff Architekturstil
• System
• Architektur– „Abstraktion der Laufzeit-Elemente eines Systems innerhalb einer
Operationsphase des Systems“ (Fielding)
• Architekturstil– Constraints– Features
Olga Liskin: REST - Grundlagen 605.05.2010
REST als Architekturstil
Constraints: Features:
Client-Server Portabilität, Skalierbarkeit, Unabhängige Entwicklung der Komponenten
Statelessness Skalierbarkeit, Einfachheit, Transparenz
Caching Effizienz, Skalierbarkeit
Uniform Interface Skalierbarkeit, Einfachheit, Entwickelbarkeit
Layered System Effizienz, Skalierbarkeit
Code on Demand (opt.) Entwickelbarkeit, Erweiterbarkeit
Olga Liskin: REST - Grundlagen 705.05.2010
RESTful Webservices – HTTP
Ausflug: Client-Server-Kommunikation per HTTP• Client sendet Anfrage an Server
– HTTP-Request:GET /users/oliskin HTTP/1.1Host: www.example.orgAccept: text/xml,application/xml,text/htmlAccept-Language: us,enUser-Agent: Mozilla/5.0
• Server bearbeitet Anfrage und sendet eine Antwort– HTTP-Response:
HTTP/1.1 200 OKDate: Wed, 05 May 2010 14:30:00 CETServer: ApacheEtag: „3637586“Content-Type: application/xmlContent-Length: 30229
<?xml version=„1.0“>...
– Kann auch eine Fehlermeldung sein:HTTP/1.1 404 Not FoundContent-Type: text/htmlDate: Wed, 05 May 2010 14:30:00 CETServer: ApacheContent-Length: 30229
<html><head>...
Olga Liskin: REST - Grundlagen 805.05.2010
RESTful Webservices – HTTP
Ausflug: Client-Server-Kommunikation per HTTP• Meta-Daten:
– Informationen über Anfrage bzw. mitgelieferte Daten z.B.:• Client:
– Accept– User-Agent– If-Modified-Since
• Response-Codes:– Geben Art der Antwort an, z.B.:
• 200 OK• 201 Created• 301 Moved Permanently• 304 Not Modified• 401 Not Authorized• 409 Conflict
– Response sollte entsprechend bestimmte Meta-Daten enthalten (z.B. neue Adresse bei „301 Moved Permanently“)
• Server:− ETag− Content-Type− Last-Modified
Olga Liskin: REST - Grundlagen 905.05.2010
RESTful Webservices – Prinzipien
Wichtige Prinzipien, die Webservices befolgen müssen, um eine REST-konforme Architektur zu erhalten:• Ressourcen• Identifizierbarkeit• Repräsentationen• Verlinkungen• Uniform Interface• Statelessness• Hypermedia as the Engine of Application State (HATEOAS)
Olga Liskin: REST - Grundlagen 1005.05.2010
RESTful Webservices – Prinzipien
Ressourcen• Zentrales Element• Ressource = alles, was ein
Client interessant finden könnte
• „In Ressourcen denken“• Sonst Uniform Interface
nicht möglich
Beispiel: verteilter Notizblock
Ressourcen:Block
Notiz
Benutzer
aber auch z.B.:
Liste von Notizen
Olga Liskin: REST - Grundlagen 1105.05.2010
RESTful Webservices – Prinzipien
Identifizierbarkeit• Jede Ressource soll
eindeutig identifizierbar sein
• Einheitliches Konzept im Web: URI (Uniform Ressource Identifier)
Beispiel:
http://www.example.org/usershttp://www.example.org/users/oliskinhttp://www.example.org/users/oliskin/noteshttp://www.example.org/users/oliskin/notes/note07http://www.example.org/notes?keyword=rest
Olga Liskin: REST - Grundlagen 1205.05.2010
RESTful Webservices – Prinzipien
Repräsentationen• Darstellung einer
Ressource• Verschiedene
Repräsentationen zu einer Ressource– Client sagt, welche Formate
er akzeptiertGET /users/oliskin HTTP/1.1Host: www.example.orgAccept: text/xml,application/xml,text/htmlAccept-Language: us,enUser-Agent: Mozilla/5.0
HTTP/1.1 200 OKDate: Wed, 05 May 2010 14:30:00 CETServer: ApacheEtag: „3637586“Content-Type: application/xmlContent-Length: 30229
<?xml version=„1.0“>...
Beispiel:Ressource: Benutzer oliskin
Repräsentation 1 – XML:
Repräsentation 2 – JSON:
Repräsentation 3 – PNG:
Olga Liskin: REST - Grundlagen 1305.05.2010
RESTful Webservices – Prinzipien
Repräsentationen• Format z.B. durch XML festgelegt• Aber nicht, wie man XML verwendet
Olga Liskin: REST - Grundlagen 1405.05.2010
RESTful Webservices – Prinzipien
Repräsentationen• Besser: Allgemeine Muster verwenden
– XHTML:
Olga Liskin: REST - Grundlagen 1505.05.2010
RESTful Webservices – Prinzipien
Repräsentationen• Besser: Allgemeine Muster verwenden
– Atom:
Olga Liskin: REST - Grundlagen 1605.05.2010
RESTful Webservices – Prinzipien
Verlinkungen• Hypermedien haben
Fähigkeit zur Verlinkung• Erfolg des WWW• Client kann sich durch
Folgen von Links durch das System bewegen
• Hypermedia as the Engine of Application State
Beispiel:XML Beispiel von vorhin:
Besser: Notizen verlinken
Olga Liskin: REST - Grundlagen 1705.05.2010
RESTful Webservices – Prinzipien
Statelessness• Request enthält alle Informationen
die Server zum Ausführen braucht• Server verfolgt nicht den
Anwendungszustand des Clients• URI weitergeben• Server zwischendurch
austauschen
Olga Liskin: REST - Grundlagen 1805.05.2010
RESTful Webservices – Prinzipien
Uniform InterfaceHTTP-Method + URI
GET: Ressource abrufenHEAD: Ressource abrufen (ohne Body)PUT: Ressource anlegen/updatenDELETE: Ressource löschenPOST: Untergeordnete Ressource
anlegen, Daten hintenanhängen
• Idempotenz, Safety
Beispiel:
/users/oliskin/notesGET: Liste von oliskins Notizen abrufenPUT: n/ADELETE: n/APOST: neue Notiz anlegen
/users/oliskinGET: Repräsentation von oliskin abrufenPUT: Benutzer neu anlegen oder
aktualisierenDELETE: Benutzer löschenPOST: n/A
Olga Liskin: REST - Grundlagen 1905.05.2010
RESTful Webservices – Prinzipien
HATEOAS• Trotz generischem Interface
reichhaltige Anwendungen erstellen, nicht nur CRUD
• Verlinkungen schaffen Transitionen
• Vorteile:– Weniger Fehler/Bugs– Weniger ungültige
Transitionen– Server kontrollieren ihren
eigenen Namespace, Clients hängen nicht an festen URI-Mustern
Beispiel:GET users/oliskin/notes HTTP/1.1
<?xml version=“1.0“><notes><note><title>REST ist toll</title><link rel=„Kommentare“
href=„users/oliskin/notes/note08/comments“/>
</note>…
</notes>
Olga Liskin: REST - Grundlagen 2005.05.2010
Patterns
• Collection-Ressourcen– Eigene Ressource für Liste von Elementen
• Optimistische Transaktionen– Konflikt bei gleichzeitigem Ändern einer Ressource– Server sendet ETag mit Ressource (kodiert Version)– Client sendet Request mit Header If-Match:{ETag}– Bei alter Version: 412 Conflict
• Idempotent Ressourcen anlegen mit POST1. Leere Ressource mit POST anlegen2. Server sendet 301 Created mit URI der neuen Ressource3. Führe nun PUT mit der Ressource auf neue URI aus -> Idempotent
Olga Liskin: REST - Grundlagen 2105.05.2010
Anti-Patterns
• Tunnelung von Methoden mit POST– Es wird immer POST verwendet, Methoden-Information wird im Entity-
Body versteckt– Uniform Interface?
• Tunnelung von Methoden mit GET– Ähnlich Tunnelung mit POST– Zusätzlich: GET sollte eigentlich safe sein
• Mangelnde Verwendung von Hypermedien/-links– „Web-Based CRUD“*– Client kann sich nicht durch Folgen von Links durch das System
bewegen– HATEOAS?
* Tilkov, S. REST Anti-Patterns. http://www.infoq.com/articles/rest-anti-patterns (Stand: 25.04.2010)
Olga Liskin: REST - Grundlagen 2205.05.2010
Software Engineering-Prinzipien
• Aufstellung und Verwendung von Architekturen– Abstraktion des Systems
• Architekturstil– „Pattern für Architekturen“– Erfahrung beim Entwickeln von Architekturen ausnutzen
• (Anti-)Patterns verwenden• Gemeinsame Muster entwerfen und verwenden
– URI, HTTP– Syndication Formate
Olga Liskin: REST - Grundlagen 2305.05.2010
Code schreiben
Client• Bestehende Webservices ansprechen• Meistens über Standard-Bibliotheken• HTTP Request senden• Antwort parsen (z.B. XML)
Olga Liskin: REST - Grundlagen 2405.05.2010
Code schreiben
Beispiel: Java HttpClient (Apache Jakarta Project)
Olga Liskin: REST - Grundlagen 2505.05.2010
Code schreiben
Server• Verschiedene Frameworks
– JAX RS (JSR 311) (Schnittstellenspezifikation für Java)• Jersey• Restlet• JBoss RestEasy
– Ruby on Rails
Olga Liskin: REST - Grundlagen 2605.05.2010
Code schreiben
ServerBeispiel: Jersey (Annotations-getrieben)
Olga Liskin: REST - Grundlagen 2705.05.2010
Code schreiben
ServerBeispiel: Ruby on Rails (Konnektoren)(Ausführliches Beispiel in: Richardson; Ruby: RESTful Web Services. O‘Reilly. 2007)
Olga Liskin: REST - Grundlagen 2805.05.2010
Zusammenfassung
• Verbesserung von Systemen im Web• Relevante Prinzipien identifizieren: REST als Architekturstil• Prinzipien beim Design von Anwendungen (z.B.Webservices)
verwenden• Patterns und Anti-Patterns• Umsetzung in Code
Olga Liskin: REST - Grundlagen 2905.05.2010
Zusammenfassung
Fragen?
Diskussionsidee:Sind Patterns/Anti-Patterns der Schlüssel zu „RESTfulleren“ Webservices?
Was können wir als Software-Ingenieure noch beisteuern, um RESTfulness zu verbessern?
Validatoren, DODEs? Bessere Frameworks, DSLs?,
„Berühmtere“ Patterns?
top related