# Macht REST immer sinn?



## eskimo328 (30. Jan 2015)

Webanwendung basiert auf JBoss AS + JAX-RS + AngularJS

Funktionen der Anwendung sind u.a.:


Ticket erstellen
Ticket anzeigen: Alle details zu einem Ticket anzeigen
Ticket schließen: Ticket status wird geändert zusätzlich kann noch ein Kommentar eingegeben werden
Ticket zuweisen: Ticket Bearbeiter wird geändert zusätzlich kann noch ein Kommentar eingegeben werden. Server sendet E-Mail Benachrichtigung an neuen Bearbeiter

Die entsprechende RESTful API könnte einfach wie folgt aussehen:


```
#Ticket erstellen 
POST /tickets/

#Ticket anzeigen
GET  /tickets/:id 

# Ticket an neuen Mitarbeiter zuweisen
POST /tickets/:id/assign 

# Ticket schließen
POST /tickets/:id/close
```

Allerdings wäre das nicht ganz im Sinne von REST.

Wie würde das korrekt im Sinne von REST gemacht werden? Denn was mir nicht so ganz klar ist, ich könnte zwar mit einem _POST /tickets/:id_ das Ticket ändern. Allerdings muss je nachdem was geändert wird, der Server unterschiedliche Verarbeitungen starten. Z. B. wenn der Bearbeiter geändert wird, wird zusätzlich eine E-Mail Benachrichtigung gesendet.
Oder es kommt auch drauf an, wer das Ticket erstellt. Wenn ein Mitarbeiter das Ticket erstellt, wird eine E-Mail Benachrichtigung an den Kunden versendet, wenn ein Kunde das Ticket erstellt, wird eine E-Mail Benachrichtigung an den Mitarbeiter gesendet.


----------



## JeromeC (12. Feb 2015)

eskimo328 hat gesagt.:


> Allerdings wäre das nicht ganz im Sinne von REST.



Was ist nicht im Sinne von REST? REST sagt nur aus, welches Verhalten erwartet wird, nicht wie die Implementation dahinter aussieht. GET fordert eine Ressource an, usw. Was aber nötig ist, um die GET-Anfrage auszuführen, ist nicht eingeschränkt (Mails schreiben, Hühner füttern, etc.). Man geht nur meistens davon aus, dass REST-Services zustandslos sind, also keine Werte oder Parameter in sich halten.
Übrigens: Das Erstellen eines Ticket wäre für mich auf den ersten Blick ein PUT-Befehl.
Überblickerweise kommt auch erst der Methodenname und dann die Parameter, also /tickets/assign/:id.


----------

