From c0ed5f18e5a1ff3800e3f29b97a0bc626ab6bc7f Mon Sep 17 00:00:00 2001 From: Lukas Panni Date: Thu, 30 Nov 2023 18:49:51 +0100 Subject: [PATCH] REST --- Material/Slides/02_HTTP_REST.md | 65 +++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/Material/Slides/02_HTTP_REST.md b/Material/Slides/02_HTTP_REST.md index 60364dd..c42e881 100644 --- a/Material/Slides/02_HTTP_REST.md +++ b/Material/Slides/02_HTTP_REST.md @@ -249,9 +249,74 @@ Server->Client : 200 OK, ContentType: application/json ## REST? +**Representational State Transfer** +- Architekturstil des Webs +- Geht auf Dissertation (2002) von Roy Fielding zurück: + - "Architectural Styles and the Design of Network-based Software Architectures" + - [Kapitel 5](https://ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm): REST +- Wichtige Kennzeichen + - Skalierbare Interaktion + - Generische Interfaces + - Unabhängigkeit der Komponenten + - Lose Kopplung +## REST Prinzipien +### Resources with unique Identifiers +Ressourcen und ihre Identifikation +### Links & Hypermedia +Beziehungen zwischen Ressourcen +### Uniform Interfaces +Einheitliche Schnittstellen für generische Clients + +### Multiple Representations +Mehrere Repräsentationen / Formate + +### Stateless Interactions +Zustandslosigkeit der _Interaktion_ + + +## REST - Ressources with unique Identifiers + +- Jede Webanwendung stellt verschiedene Ressourcen bereit + - z.B. Produkte, Songs, User, ... + - aber auch abstraktere Dinge: Prozesse, Anfragen, ... + +- Ressourcen müssen eindeutig identifizierbar sein \rightarrow{} URIs + - Uniform Resource Identifiers: ID einer Ressource + - Ähnlich wie URL: aber URL verweist auf konkreten Ort ("**L**ocator") + +## REST - Links & Hypermedia + +- Beziehungen zwischen Ressourcen werden über (Hyper)Links ausgedrückt +- Server kann Folgeaktionen über Links ausdrücken + - Damit einen Zustandsübergang ermöglichen + - \rightarrow{} "HATEOAS: Hypertext as the engine of application state" + +## REST - Uniform Interfaces + +- Wichtig für Skalierbarkeit +- Ein einheitlicher Client kann alle Ressourcen nutzen +- \rightarrow{} **HTTP** + - Klare Semantik der Methoden + - Klare Semantik der Status-Codes + +## REST - Multiple Representations + +- Verschiedene Arten von Clients benötigen verschiedene Formate +- \rightarrow{} **HTTP Content-Negotiation** + - Menschenlesbare und maschinenlesbare Repräsentationen der gleichen Ressource + - Verschiedene Sprachen + +## REST - Stateless Interactions + +- Nicht zu verwechseln mit **zustandslosen Anwendungen**! + - Nur die _Interaktion_ (Request-Response) ist zustandslos +- Zustand muss irgendwie anders verwaltet werden + - Als Ressource + - Auf dem Server + - Im Client