Top Menu

Jump to content
Home
    • Projects
    • Work packages
    • News
    • Getting started
    • Introduction video
      Welcome to OpenProject
      Get a quick overview of project management and team collaboration with OpenProject. You can restart this video from the help menu.

    • Help and support
    • Upgrade to Enterprise edition
    • User guides
    • Videos
    • Shortcuts
    • Community forum
    • Professional support

    • Additional resources
    • Data privacy and security policy
    • Digital accessibility (DE)
    • OpenProject website
    • Security alerts / Newsletter
    • OpenProject blog
    • Release notes
    • Report a bug
    • Development roadmap
    • Add and edit translations
    • API documentation
  • Sign in
      Create a new account
      Forgot your password?

Side Menu

  • Overview
  • News
  • Forums
  • Wiki
    • Table of contents
      • Expanded. Click to collapseCollapsed. Click to showWiki
        • Expanded. Click to collapseCollapsed. Click to showBeispielprojekte
          • Hierarchy leafFlappy Box2D
          • Hierarchy leafFlappy Improved
          • Hierarchy leafHighscore Hibernate
          • Hierarchy leafHighscore Webservice + Anbindung mit Retrofit
        • Expanded. Click to collapseCollapsed. Click to showEntwicklung mit Java
          • Hierarchy leaf001) Grundlagen - Entwicklungsumgebung
          • Hierarchy leaf002) Erstes Programm
          • Hierarchy leaf003) Variablen und Datentypen
          • Expanded. Click to collapseCollapsed. Click to show004) Schleifen
            • Hierarchy leaf1) for - Zählschleife
            • Hierarchy leaf2) while
            • Hierarchy leaf3) do while
            • Hierarchy leaf4) for each
          • Hierarchy leaf005) Arrays
          • Hierarchy leaf006) Methoden
          • Expanded. Click to collapseCollapsed. Click to show007) Objektorientierte Programmierung
            • Hierarchy leaf001) Klasse
            • Hierarchy leaf002) Vererbung und Darstellung von Klassen in UML
            • Hierarchy leaf003) Abstrakte Klasse
            • Hierarchy leaf004) Design patterns
          • Expanded. Click to collapseCollapsed. Click to show008) Webservices
            • Hierarchy leaf01) REST - Representational State Transfer
            • Hierarchy leaf02) Minimaler Webservice
            • Hierarchy leaf03) Joke Webservice
            • Hierarchy leaf04) Highscore Service
        • Expanded. Click to collapseCollapsed. Click to showMatura - Vorbereitung
          • Hierarchy leaf01) Projektmanagement
          • Hierarchy leaf02) Objektorientierte Programmierung
          • Hierarchy leaf03) Modellierung und UML
          • Expanded. Click to collapseCollapsed. Click to show04) Design Patterns
            • Hierarchy leaf00) Generelle Konzepte
            • Hierarchy leafFactory(-Method) Pattern
            • Hierarchy leafObserver Pattern
            • Hierarchy leafSingleton Pattern
            • Hierarchy leafStrategy Pattern
          • Hierarchy leaf05) Algorithmen und Datenstrukturen
          • Hierarchy leaf06) Webtechnologien
          • Hierarchy leaf07) Webservices
          • Hierarchy leaf08) Softwarequalitätsmanagement
          • Hierarchy leaf09) Softwareentwicklungsmodelle
        • Expanded. Click to collapseCollapsed. Click to showProjekt Rahmenbedingungen
          • Expanded. Click to collapseCollapsed. Click to showRetrospektive
            • Hierarchy leafRetro - [Name Schüler_in]
        • Hierarchy leafReact Native
        • Expanded. Click to collapseCollapsed. Click to showÜbungen
          • Hierarchy leaf1) Basic
          • Expanded. Click to collapseCollapsed. Click to show2) Basic
            • Hierarchy leaf001) Methode ohne Rückabewert mit Parametern
            • Hierarchy leaf002) Methode mit Parametern und Rückgabewert
            • Hierarchy leaf003) Text umdrehen
            • Hierarchy leaf004) Text umdrehen 2
            • Hierarchy leaf005) Kommandozeile
            • Hierarchy leaf006) Kommandozeile 2
            • Hierarchy leaf007) Vererbung - Geometry
            • Hierarchy leaf008) File from String
            • Hierarchy leaf009) Rekursion - Summe
            • Hierarchy leaf010) Rekursion - File
          • Expanded. Click to collapseCollapsed. Click to showDatenstrukturen
            • Hierarchy leaf011) Binärbaum
            • Hierarchy leaf012) Binärbaum - Generics
            • Hierarchy leaf013) AVL - Tree
            • Hierarchy leaf014) Linked List - Einfach verkettete Liste
            • Hierarchy leaf015) Graph
            • Hierarchy leaf016) Dijkstras shortest path first
          • Expanded. Click to collapseCollapsed. Click to showJava - Kara
            • Hierarchy leafKara lernt schreiben
You are here:
  • Wiki
  • Entwicklung mit Java
  • 008) Webservices
  • 01) REST - Representational State Transfer

Content

01) REST - Representational State Transfer

  • More
    • Print
    • Table of contents

Geschichte

Das REST-Paradigma/REST-Prinzipien entwickelten sich asu dem von Roy Fielding 1994 entworfenen HTTP Object Model. Den REST-Architekturstil veröffentlichte er 2000 im Rahmen seiner Dissertation.

Die Prinzipien der Rest Architektur (https://de.wikipedia.org/wiki/Representational_State_Transfer)

Client Server Architektur

  • Der Server stellt einen Dienst bereit, dieser kann vom Client benutzt werden

Zustandslosigkeit

  • Jede Anfrage an den Server ist in sich geschlossen, es werden keine Zustandsinformationen zwischen zwei Nachrichten gespeichert.
  • Durch diese Zustandslosigkeit wird Skalierbarkeit ermöglicht. Die Last kann über mehrere Anwendungsserver verteilt werden

Caching

  • HTTP (siehe ETag) Caching mechanismen sollen verwendet werden

Einheitliche Schnittstelle

Addressierbarkeit von Ressourcen

Jede Ressource soll über eine URI (Uniform Resource Identifier) erreichbar sein, bzw. alles was über eine URI erreichbar ist, ist eine Resource

Beispiel

https://highscore.drlue.at/users/1

Stellt die Benutzerresource mit der ID 1 bereit.

Repräsentation zur Veränderung von Ressourcen

Der Webservice soll die Möglichkeit bieten, die Darstellung der Ressourcen entsprechend den wünschen des Clients anzupassen.

Beispiel

Zugriff auf die Ressource /users/1:

Webbrowser erhält html:

Request:

GET /users/1 HTTP/1.1
Host: highscore.drlue.at
Accept: text/html
<html>
  <table>
    <tr>td>Id:</td><td>1</td></tr>
    <tr>td>Name:</td><td>Alfons</td></tr>
    <tr><td>Highscore:</td><td>1000</td></tr>
  </table>
</html>

App erhält json (Javascript object notation):

GET /users/1 HTTP/1.1
Host: highscore.drlue.at
Accept: application/json
{
  "id" : 1,
  "name" : "Alfons",
  "highscore" : 1000
}
Einheitliche Schnittstelle

REST-Nachrichten sollen selbstbeschreibend sein. Manipulation von Ressourcen erfolgt über Standardmethoden.

Hiefür eigenen sich die vom HTTP Protokoll bereitgestellten Verben (Methoden):

  • GET - Ressource holen
  • PUT - Ressource verändern
  • POST - Ressource erstellen
  • DELETE - Ressource löschen
HATEOAS (Hypermedia as the Engine of Application State)

Wichtigste Eigenschaft nach Fielding, wir werden trotzdem aktuell nicht darauf eingehen. Für Informationen siehe: https://de.wikipedia.org/wiki/Representational_State_Transfer#HATEOAS

Mehrschichtige Systeme

Systeme sollen mehrschichtig aufgebaut sein, jedoch nur eine Ebene soll zugänglich für den Anwender sein.

Code on Demand (optional)

Der Webservice soll Code der beim Client ausgeführt wird zur Verfügung stellen können.

Loading...