Hallo pl,
(Edit: Ich habe mit diesem Beitrag angefangen, bevor Dedlfix gepostet hat)
ein Objekt, das mit einer Verknüpfung die Eigenschaft hat
da ist dir was beim Kopieren vom Clipboard gerutscht. Hier vollständig:
ein Objekt, das mit einer Verknüpfung $$\circ$$ die Eigenschaft $$a \circ a = a$$ hat
Konkret erläutert die Wikipedia auch für den Objekttyp "Funktion", dass eine idempotente Funktion bezüglich der Verkettung von Funktionen die Eigenschaft $$f(f(a)) = f(a)$$ hat.
Im Falle eines Web-Requests ist $$a$$ der Systemzustand des Servers, und $$f$$ ein HTTP Request. $$f(a)$$ ist der Systemzustand nach Verarbeitung des Requests. Für einen idempotente Request bedeutet $$f(f(a)) = f(a)$$, dass der Systemzustand des Servers nach zweimaliger Abarbeitung des Requests der gleiche ist wie nach einmaliger Abarbeitung.
Und das heißt: Ich habe zuvor Blödsinn geredet und etwas gelernt. Idempotent ≠ Identisch. Idempotenz bedeutet nicht, dass die Response von $$f(a)$$ die gleiche sein muss wie die von $$f(f(a))$$, denn diese Responses werden basierend auf unterschiedlichen Systemzuständen $$a$$ und $$a'$$ erzeugt. Insofern ist auch Christian drauf reingefallen, denn danach ist sein GET, der eine Gelesen-Markierung setzt, idempotent.
Für Christian ist es wichtig, dass $$f$$ sich je nach Request-Art (Preview oder nicht) unterschiedlich verhält. Aber auch da ist er idempotent, denn zwei Preview-GETs sollten das Forum in den gleichen Zustand versetzen wie einer. Idealerweise ist dieser Preview-GET nicht nur idempotent, sondern auch identisch, d.h. $$f_p(a) = a$$ - der Zustand des Forums verändert sich nicht.
Das gilt nicht für POSTs. $$p(p(a)) \ne p(a)$$ ist durchaus zugelassen. Natürlich darf ein POST gelegentlich mal idempotent sein, z.B. wenn zwei Posts zu schnell aufeinander folgen, darf der 2. Post einen Flooding-Error liefern und das Forum unverändert lassen.
Danke für die Anregung zum Nachlesen.
Du siehst übrigens, dass Idempotenz im HTTP Protokoll durchaus einen Platz hat. De vordefinierten HTTP Methoden haben Semantik. Man darf sie nicht straflos ignorieren.
Rolf
sumpsi - posui - clusi