PowerPoint-Präsentation

Werbung
REST – ein Erfahrungsbericht
Mathias Pannier
Agenda
• Was ist REST?
• Transaktionen
• Security
• Performance
• (Mehr) Aufwand
• Rest Client in 5 Minuten
mathiaspannier.wordpress.com
Über mich
• Name: Mathias Pannier
• Position: Softwareentwickler/Teamleiter
• Mehr als 15 Jahre Erfahrung mit Softwareentwicklung in Delphi
• Blog: mathiaspannier.wordpress.com
mathiaspannier.wordpress.com
Fragen
• Wer kann mit dem Thema REST/WebService gar nichts anfangen?
• Wer hat bereits einen REST Server / WebService erstellt?
• Wer hat bereits einen REST Client erstellt bzw. einen WebService
benutzt?
• Wer hat eine Anwendung mit COM/OLE Automatisierung erstellt bzw.
ein eigenes SDK für andere Entwickler zur Verfügung gestellt?
• Wer hat bereits eine mehrschichtige Anwendung gebaut? (MIDAS,
CORBA)
mathiaspannier.wordpress.com
Was ist REST?
• Representational state transfer (REST) oder RESTful Web services
(https://en.wikipedia.org/wiki/Representational_state_transfer)
•
•
•
•
•
Client-Server
Stateless
Cacheable
Layered system
Uniform interface
mathiaspannier.wordpress.com
Was ist REST?
• Meine eigene Erklärung jenseits von wikipedia:
•
•
•
•
ist ein quasi "Standard" für die Entwicklung von verteilten Anwendungen
Basis ist das HTTP Protokoll mit den Verben (GET, POST, PUT usw.)
alles ist eine URL (Ressource)
es geht darum Daten (z.B. aus einer Datenbank) über eine einheitliche (Web) - Schnittstelle
zur Verfügung zu stellen
• erleichtert die Erstellung unterschiedlicher Clients (Mobil, Win32/64, HTML/JS)
• in dem Bereich fällt oft der Begriff JSON
•
•
•
•
wird meist als leichtgewichtiges Austauschformat gegenüber XML genutzt
es kann aber auch XML oder Plain Text verwendet werden
ist nicht festgelegt
einfache Verwendung in einem HTML/JavaScript Client
• Für den weiteren Verlauf ist wichtig zu wissen:
Man ruft über HTTP eine URL auf und erhält Daten in Form von JSON zurück.
mathiaspannier.wordpress.com
Transaktionen
• ein größeres Problem bei der Umstellung von C/S zu REST sind
Transaktionen
• man ist es gewöhnt an einer Stelle (im Client) eine Transaktion zu starten
und beliebig viele SQL Abfragen auszuführen (insert, edit, delete, select)
• Transaktionen im Client starten ist nicht mehr möglich
• es gibt einen Aufruf einer Ressource URL (lesend oder schreibend)
• (HTTP) delete from Tabelle1
• (HTTP) delete from Tabelle2
• -> sind 2 Aufrufe in 2 DB Transaktionen
• (HTTP) delete from Tabelle1 and Tabelle2
• -> ist ein Aufruf in einer Transaktion
mathiaspannier.wordpress.com
Transaktionen
• um Daten z.B. aus mehreren Tabellen innerhalb einer Transaktion
abzufragen (select) gibt es dennoch nur einen (HTTP) Aufruf zum
(REST) Server
• innerhalb des Servers können wie gewohnt mehrere SQLs in einer
Transaktion abgesetzt werden
• zu beachten ist: alle benötigten Daten müssen mit einem Aufruf zum
Server gesendet werden
• Auf keinen Fall mit einem (HTTP) Aufruf eine Transaktion starten,
dann mit weiteren Aufrufen Daten lesen/schreiben und mit einem
finalen Aufruf die Transaktion beenden.
mathiaspannier.wordpress.com
Security
• Entscheidung zwischen Public vs. Private REST Server
• Public:
• www.meinedomain.de/api/meinservice
• Zugriff von externen Entwicklern möglich/gewünscht
• Private:
• LAN intern ohne Zugriff von außen (außer VPN)
• Zugriff nur durch eigene Programme
• das Thema Eingabevalidierung erhält einen viel höheren Stellenwert als in
einer klassischen C/S Anwendung
• es reicht nicht z.B. in einem HTML Formular das „Required“ Feld zu setzen oder das
Feld als E-Mail Adresse zu definieren
• alles MUSS serverseitig validiert werden; Client Validierung „nur“ um Usability zu
verbessern
mathiaspannier.wordpress.com
Security
• ein GET verrät mehr als ich eigentlich sagen wollte
• Wenn Bsp. in einer Anwendung Daten aus einer DB abgefragt werden und je
nach Benutzeranmeldung unterschiedliche Felder nicht sichtbar sein sollen,
dann dürfen Sie auch nicht mit ausgeliefert werden!
• JSON Daten sind "sichtbar" auch wenn Sie nicht in der Oberfläche angezeigt
werden
• Fehlermeldungen verstecken bzw. „umformulieren“
• eine Datenbank Exception sollte nicht bis zum Benutzer durchdringen
• kann von einem Angreifer ausgenutzt werden
• interne Datenstruktur sichtbar
• Fehlermeldung als HTTP Statuscodes mit Zusatzinformationen
mathiaspannier.wordpress.com
Performance
• Sind REST Server (wenn Sie gut implementiert sind) performanter im
Vergleich zu klassischen C/S Anwendungen?
• Ja (im WAN) und Nein (im LAN)
• SQL Server und deren Zugriffe über TCP/IP sind für LAN Verbindungen
ausgelegt
• REST Aufrufe haben mehr Zwischenschritte zwischen der DB und dem
aufrufenden Client (Serialisierung; ähnlich RPC/COM Aufrufen)
mathiaspannier.wordpress.com
Performance
• das Holen der Daten (wieviel und welche) muss wohl überlegt sein
• Balance zwischen der Anzahl der Aufrufe und der zurückgelieferten
Datenmenge
• jeder Aufruf kostet Zeit bzw. hat einen Overhead
• bei HTML JS Clients oder in Multithreaded Anwendungen können mehrere parallele
Aufrufe Vorteile bringen  WICHTIG: Connection Pooling verwenden
• in einem Aufruf sollten Daten aus mehreren Abfragen aggregiert werden
(Master - Detail)
• man muss seine Anwendungsszenarien vorher gut definieren (am besten GUI
Dummy erstellen)
mathiaspannier.wordpress.com
Performance
• Cache
• alle großen Webseiten die "schnell" sind "leben" von gecachten Daten
• signifikante Performanceverbesserung aber viele "Probleme"
(Aktualisierungen)
• Browser Cache nutzen (bei HTML/JS Clients)
• eigener Client Cache bei Win Anwendung
• serverseitiger Cache (Hauptspeicher oder „Memory“ Datenbanken)
• Interessantes Video Marco Cecconi - "The Architecture of StackOverflow"
https://www.youtube.com/watch?v=t6kM2EM6so4
• Faustregel: So wenig wie möglich Daten mit so wenig wie möglich
Aufrufen.
mathiaspannier.wordpress.com
(Mehr) Aufwand
• obwohl von den Marketingstrategen anders behauptet steigt der Aufwand
• je nach Programmiersprache/-umgebung gibt es bessere oder schlechtere
Unterstützung (Tools für die Erstellung)
• man hat (zumindest in der Delphi Welt) min. eine zusätzliche
Anwendungsschicht
• man muss sich zwangsweise mit dem Thema Webserver (IIS, Apache)
auseinandersetzen
• einfaches CRUD auf Tabellenebene mit höherem Aufwand
• administrativer Aufwand steigt (vorher ein DB Server und ein Client; jetzt 1
DB Server, 1 App Server und mehrere unterschiedliche Clients)
• Versionierung der Schnittstelle muss beachtet werden (keine Typsicherheit
beim Compilieren)
mathiaspannier.wordpress.com
Fragen?
mathiaspannier.wordpress.com
Rest Client in 5 Minuten
https://www.youtube.com/watch?v=A0epsUp2Xfc
mathiaspannier.wordpress.com
Herunterladen