! events
!reactive
! pubsub
! callback
! session
!user-id-in-url
Jede Ressource hat eine eindeutige URL
Das Übergabeformat kann für Änderungen verwendet werden.
JSON, XML, YAML, HTML
HTTP wird nicht nur als Transportschicht, sondern auch als Interaktionsmodell und als Organisation verwendet.
Addition von 0.
Multiplikation von 1.
Einmaliger Aufruf hat den gleichen Effekt wie mehrmaliger Aufruf.
POST ist nicht idempotent, PATCH kann es sein, alles andere ist.
Fordert die angegebene Ressource vom Server an. GET weist keine Nebeneffekte auf. Der Zustand am Server wird nicht verändert, weshalb GET als sicher bezeichnet wird.
Idempotent.
Die angegebene Ressource wird angelegt. Wenn die Ressource bereits existiert, wird sie geändert.
Idempotent.
Ein Teil der angegebenen Ressource wird geändert. Hierbei sind Nebeneffekte erlaubt.
Je nach Glaubensrichtung Idempotent oder auch nicht.
Löscht die angegebene Ressource.
Idempotent.
Aber: 200 beim ersten, 404 beim nächsten ist ok.
Fordert Metadaten zu einer Ressource an.
Idempotent.
Prüft, welche Methoden auf einer Ressource zur Verfügung stehen.
Idempotent.
Nicht so wichtig.
Idempotent.
Fügt eine neue (Sub-)Ressource unterhalb der angegebenen Ressource ein. Da die neue Ressource noch keinen URI besitzt, adressiert der URI die übergeordnete Ressource. Als Ergebnis wird der neue Ressourcenlink dem Client zurückgegeben. POST kann im weiteren Sinne auch dazu verwendet werden, Operationen abzubilden, die von keiner anderen Methode abgedeckt werden.
NICHT Idempotent!
As an example, imagine a service that allows creation of hosted servers, which will be named by the service:
POST http://api.contoso.com/account1/servers
The response would be something like:
201 Created
Location: http://api.contoso.com/account1/servers/server321
Where "server321" is the service-allocated server name.
(Deshalb braucht es Idempotenz)
(Deshalb braucht es Idempotenz)
... damit man zB die /customer/1234 Urls mit einem reverse Proxy zu einem anderen Service schicken kann ohne die Struktur zu ändern.
HTTP/1.1 200 OK Content-Type: text/html <!DOCTYPE html> <html>
Layered System:
ich brauche nur das nächste Layer zu kennen.
Clients und Server können generiert werden.
(Deshalb OPENAPI, Swagger & Co)
http://api.example.com/v1/customer/12 http://apiv1.example.com/customer/12
Accept-Version: v1 Accept: application/vnd.example.v1;version=1