Die Antwort ist, dass Ihre Anwendung (in einem REST-Szenario) einfach nicht verfolgen, was passiert. Der gesamte Status wird vom Client verwaltet, und Statusübergänge werden über die URI-Navigation ausgeführt. Der Teil "Statusübertragung" von REST bezieht sich auf die Clientnavigation zu neuen URIs, bei denen es sich um neue Status handelt.
Ein URI, auf den mit GET zugegriffen wird, ist effektiv eine schreibgeschützte Operation, sowohl gemäß der HTTP-Spezifikation als auch der REST-Methode. Das bedeutet, wenn der Client einen vorherigen URI "sichert", "das Schlimmste", das passiert, ist, dass ein anderer GET gemacht wird und mehr Daten geladen werden.
Lassen Sie uns sagen, dass der Kunde dies tut (stark vereinfachte pseudo-HTTP) ...
GET //site.com/product/123
Dies ruft Informationen (oder vielleicht eine Seite) zum Produkt ID 123, die vermutlich einen Verweis auf einen URI enthält, der verwendet werden kann, um diesen Artikel in den Warenkorb des Benutzers zu senden. So entscheidet der Benutzer, den Artikel zu kaufen. Wieder ist es stark vereinfacht aber:
POST //site.com/shoppingcart/ {productid = 123}
Die Rückkehr aus könnte dies eine Darstellung des Einkaufswagens oder ein Verweis auf das hinzugefügte Element sein (die mit dem Befehl DELETE (um den Artikel wieder zu entfernen) verwendet werden kann, oder eine Vielzahl anderer Dinge (wie tieferes XML, das den Inhalt des Einkaufswagens mit anderen URIs beschreibt, die auf die Einkaufswagenartikel und zurück zu den ursprünglichen Produkten verweisen). Es hängt alles von dir ab.
Aber der "Zustand" ist definiert durch was auch immer der Client tut. Es wird auf dem Server überhaupt nicht verfolgt, obwohl Sie sicher eine Kopie seines Einkaufswageninhalts in Ihrer Datenbank für einige Zeit behalten werden. (Ich kam zwei Jahre später einmal auf eine Website zurück und meine Einkaufswagen waren immer noch da ...) Aber es liegt an ihm, den Ausweis im Auge zu behalten. Für Ihre Server-App ist es nur ein weiterer Datensatz, vermutlich mit einer Art Ablaufdatum.
Auf diese Weise benötigen Sie keine Cookies und Javascript ist völlig abhängig von der Client-Implementierung. Es ist schwierig, einen anständigen REST-Client ohne Skript zu erstellen - Sie könnten wahrscheinlich etwas mit XSLT erstellen und nur XML vom Server zurückgeben, aber das ist wahrscheinlich mehr Schmerz, als irgendjemand benötigt.
Der Ausgangspunkt ist REST wirklich zu verstehen, dann das System zu entwerfen und dann zu bauen. Es eignet sich definitiv nicht dazu, es wie bei den meisten anderen Systemen on-the-fly zu bauen (richtig oder falsch).
Dies ist ein ausgezeichneter Artikel, dass Ihnen einen ziemlich „reinen“ Blick auf REST mit Code, ohne sie zu abstrakt und ohne bogging Sie nach unten gibt:
http://www.infoq.com/articles/subbu-allamaraju-rest
Sie bringen ein Szenario auf, über das ich verwirrt bin. Wenn Sie zwei Jahre später zu diesem Einkaufswagen zurückkehrten, woher wusste die Website, dass Sie es waren und nicht jemand anderes, ohne Cookies zu verwenden? Du hast nicht gesagt, dass du dich mit einem Namen/Passwort anmelden musst? Oder sagst du, dass der Kunde für seinen eigenen Wagen verantwortlich ist und wenn ein Außenstehender den URI ergreift, ist es nicht unsere Schuld? Ich bin gerade in einem Nebel, weil ich nichts finden kann, was davon spricht (habe noch nicht Ihre Artikelreferenz gelesen). Wenn ein Client einen URI für ein Formular hat, das eine Bestellung enthält, wie verhindert die Site, dass jemand sie ändert? – Rob
Das war nur eine Nebensache, aber ja, ich habe mich eingeloggt - das war kein REST-System, und es hat Cookies verwendet, obwohl meine abgelaufen war. Ich habe mich einfach auf ein amüsantes Beispiel für den langfristigen Ablauf von Einkaufswagendaten bezogen. Aber Sicherheit und Authentifizierung sind im reinen REST-Konzept kein Thema. Im Wesentlichen liefert der Client bei jedem Aufruf Anmeldeinformationen, aber wie geht es mit der API? Es scheint, dass die offensichtlichste und einfachste Lösung SSL plus HTTP basic auth ist (was immerhin gut genug für Online-Banking ist). – McGuireV10
Beachten Sie, dass REST weiterhin verwendet werden kann, um einen anonymen Einkaufswagen zu erstellen (keine Anmeldung), aber es wäre nur zugänglich, solange der Client den URI für die Einkaufswagen-ID kennt. Per Definition könnte der Client diesen URI speichern und später darauf zugreifen (z. B. Lesezeichen setzen), so dass es nicht korrekt ist, dies als eine Art Armer-Mann-Sitzung zu betrachten, aber es ist ähnlich.Aber wenn der Benutzer oder Client den URI nicht gespeichert hat, würde es im Wesentlichen zu verwaisten Daten werden, wenn es nicht mit einem Login verbunden wäre (und hoffentlich irgendwann vom Tisch entfernt werden würde). – McGuireV10