Praktikumsversuch Representational State Transfer (REST)
Dieses Praktikum dient dem Verständnis des REST-Paradigmas und der praktischen Erprobung einer REST-API.
Vorbereitung
- Was bedeutet die Abkürzung HATEOAS?
- Was zeichnet eine sinnvolle REST-API aus?
REST-API Prinzipien
- Adressierung von Ressourcen per URL
- intensive Verwendung des HTTP-Protokolls (mehrere Methoden)
- GET: fordert Ressource an
- POST: erstellt neue Sub-Ressource, Rückgabe der Adresse der neuen Ressource (nicht idempotent)
- PUT: Ressource update (anlegen oder ändern)
- PATCH: teilweises update
- DELETE: Löscht Ressource
- OPTIONS:
- Repräsentation von Daten/Nachrichten (HTML, JSON, XML)
- selbstbeschreibende Nachrichten
- Entwurfsprinzip: Hypermedia as the Engine of Application State (Navigation über vom Server bereitgestellte URLs)
HATEOAS
Die Server-Antwort sollte Weiterverfolgungs-Links enthalten, z.B.:
"links": {
"self": "/quizzes/12345"
"get": "/quizzes/12345"
"solve": "/quizzes/12345/solve"
}
Das Ziel ist eine weitgehende Entkopplung des Clients von der Server-API.
Same-Origin Policy (SOP)
- Zur Verhinderung von unerwünschten Zugriffen (Cross-Site Request Forgery) zwischen verschiedenen Hosts (Origins) gilt für clientseitige Skriptsprachen die Same-Origin-Policy (SOP).
- Für einen erlaubten Zugriff müssen folgende Parameter identisch sein: Protokoll, Hostname, Port
Cross-Origin Resource Sharing (CORS)
- Für viele (verteilte) Anwendungen ist die Begrenzung von SOP unpraktisch, hier hilft CORS
- Steuerung des Skript-Zugriffs von fremden Domänen
- Steuerung über HTTP-Header: Access-Control-Allow-Origin: “erlaubter Host” (* für beliebige Herkunft)
- Asterisk und Credentials
- häufig eingesetzter Workaround: dynamische Erzeugung der Allow-Origin ja nach Origin des Requests
- WebQuiz ist mit Asterisk für beliebige Herkunft konfiguriert.
- Zur Prüfung des korrekten Zugriffs nutzt ein Browser einen sogenannten Preflight-Check.
Aufgaben
Wir nutzen für unserer Versuche CURL und die API des WebQuiz-Server auf Server idefix.
- Registrieren Sie einen neuen Nutzer
- Erzeugen Sie einige neue Quizzes mit 4 Optionen und einer korrekten Antwort, notieren Sie die zurückgegebenen IDs
- Rufen Sie ein erstelltes Quiz per ID ab
- Lösen Sie das erhaltene Quiz
- experimentieren Sie mit dem Paging (erhalten aller Quizze in einer Antwort)
- Empfangen Sie alle gelösten Quizze
- Löschen Sie eines Ihrer Quizzes, probieren Sie nicht vergebene IDs und IDs von anderen Nutzern
- Hinweis: Sie können die CURL-Kommandos auch in ein BASH-Script einbetten
API WebQuiz
- URL: https://host:8888/api
- Web-Zugriff auf die Datenbank: /h2-console
- Format für alle gesendeten und empfangenen Daten: Content-Type: application/json
Vorgang | Methode | URL | Daten | Antwort |
---|---|---|---|---|
Register new user | POST | /register | "email":"", "password":"" |
HTTP 200, 400 |
Create a quiz | POST | /quizzes | "title":"" , "text":"", "options":["a","b"], "answer": [0,1] |
id, title, text, options |
Get a quiz | GET | /quizzes/id | id, title, text, options | |
Get all quizzes | GET | /quizzes?pages=0 | Array | |
Solving a quiz | POST | /quizzes/id/solve | [0,1] |
success, feedback |
Get all completed quizze | GET | /quizzes/completed | Array | |
Deleting a quiz | DELETE | /quizzes/id | HTTP 204, 403, 404 |
- Entspricht diese API dem HATEOAS-Prinzip?
- Was würden Sie ändern?
Literatur
Ergebnisse
Sinnvolle Verlinkung der Antworten, je nach Zustand:
- Links: create user
- Links: create quiz
- Links: get quiz, solve quiz, create quiz, delete quiz
Fakultativ
Zugriff mittels JavaScript
- Rufen Sie ein Quiz mittels IP ab und stellen es in der Konsole dar.
- Schicken Sie die Antwort zum Quiz an den Server und stellen Sie die Antwort dar.
Letzte Änderung: 11. April 2025 15:30