Jnnbo: GET oder POST?

Guten Morgen,

auf meiner Seite gibt es ein kleiner „Bestell Bereich“ jetzt ist die Frage, soll ich diese Daten ab dem Zeitpunkt wo ich sage dieses Produkt in den Warenkorb legen als GET oder als POST Daten auf die Bestellübersichtsseite leiten?

Bei großen Portalen wie z.B. Ebay, amazon werden solche Daten via GET übertrage. In vielen Foren habe ich gelesen, solche Daten niemals via GET übertragen. Gibt es vor oder Nachteile? Zu diesem Zeitpunkt werden noch keine Kundendaten übermittelt, lediglich der Preis und die Menge sowie die Artikel ID

  1. Lieber Jnnbo,

    eine RESTful API setzt voraus, dass Zustände auf dem Server nur via POST verändert werden. Strenggenommen ist das Befüllen eines Warenkorbs genau so eine Sache, da Du den Inhalt des Warenkorbs in einer Session speichern wirst. Alternativ kann man das auch mit JavaScript und localStorage machen, dann braucht es keine Requests - aber wenn Du Deinen Shop von JavaScript unabhängig gestalten willst, dann ist localStorage vielleicht keine Option vür Dich.

    Du kannst Deinen Webshop aber auch so gestalten, dass nur das letztendliche zahlungspflichtige Bestellen via POST geschieht. Wer will Dir schon vorschreiben, wie Du Deinen Shop technisch umzusetzen hast?

    Liebe Grüße,

    Felix Riesterer.

    1. Tach!

      Alternativ kann man das auch mit JavaScript und localStorage machen, dann braucht es keine Requests [...]

      Das hat aber die Eigenschaft, dass das nur auf dem Client abläuft. Man hat so keine Übersicht, was die Kunden in den Warenkorb legen und dann noch nicht kaufen. Browserübergreifend ist das auch nicht. Bei einer (langlebigen) Session kann man von jedem Browser seinen Warenkorb wiederhaben. Und man will ja, dass die Leute das Zeug schon im Korb haben und es nicht zu kaufen vergessen.

      dedlfix.

  2. Liebe(r) Jnnbo,

    auf meiner Seite gibt es ein kleiner „Bestell Bereich“ jetzt ist die Frage, soll ich diese Daten ab dem Zeitpunkt wo ich sage dieses Produkt in den Warenkorb legen als GET oder als POST Daten auf die Bestellübersichtsseite leiten?

    Das ungeschreibene Gesetz lautet:

    • einmalige Requests per Post hierzu zählen alle Aufträge an den Server, die in einer Suchmaschine keinen Sinn ergeben

    • wiederkehrende Requets (auch mit wechselnder Response) per GET hierzu zählen alle Anforderungen, die man mit oder ohne Zugangsberechtigung vom Server abfordern kann.

    Üblicherweise antwortet man in Systemen auf einen POST auch nicht direkt mit Content, sondern mit einem Redirect GET auf den neuen Content, um RePOSTs zu vermeiden.

    Außerdem kann man in der Praxis per POST auch mehr Daten übertragen, als per GET, sowie Files mitsenden. Und auch hier gilt bisher das ungeschriebene Gesetz, dass die action-Adresse aus dem Formular und die Daten aus dem POST-Body nix in einer Suchmaschine zu suchen haben, es sei denn, man postet sie der Suchmaschine direkt.

    Dass Action-Attribute von Suchmaschinen auch ausgewertet werden, steht ohne Frage, aber sie werden nicht veröffentlicht, während Links, Sources (und ggf. auch Referenzen) durchaus erscheinen.

    Spirituelle Grüße Robert

  3. Hallo Jnnbo,

    auf meiner Seite gibt es ein kleiner „Bestell Bereich“ jetzt ist die Frage, soll ich diese Daten ab dem Zeitpunkt wo ich sage dieses Produkt in den Warenkorb legen als GET oder als POST Daten auf die Bestellübersichtsseite leiten?

    Prinzipiell würde ich immer nach dem Schema „Schreiben? POST, PUT, PATCH oder DELETE“ vorgehen. Letztens habe ich gelesen, dass man sich nicht Web-Entwickler nennen kann, wenn einem noch nie ein Bot einer Suchmaschine die Datenbank geleert hat, weil man einen schreibenden Zugriff via GET gemacht hat ;) Das ist natürlich nicht ganz ernst gemeint, aber es zeigt das Problem.

    Bei großen Portalen wie z.B. Ebay, amazon werden solche Daten via GET übertrage. In vielen Foren habe ich gelesen, solche Daten niemals via GET übertragen. Gibt es vor oder Nachteile? Zu diesem Zeitpunkt werden noch keine Kundendaten übermittelt, lediglich der Preis und die Menge sowie die Artikel ID

    Dass Systeme wie z.B. Ebay sowas via GET machen liegt daran, dass die Systeme oft schon ziemlich alt sind und ein Refactoring viele Ressourcen binden würde.

    LG,
    CK

  4. Moin!

    auf meiner Seite gibt es ein kleiner „Bestell Bereich“ jetzt ist die Frage, soll ich diese Daten ab dem Zeitpunkt wo ich sage dieses Produkt in den Warenkorb legen als GET oder als POST Daten auf die Bestellübersichtsseite leiten?

    Es gibt eine recht simple Bewertung, mit der man sowas entscheiden kann:

    Wenn es egal ist, ob derselbe Request zweimal oder öfter beim Server ankommt, das Ergebnis dieser Mehrfachrequests also dasselbe ist wie beim Einzelrequest, dann kann man GET nehmen. GET ist idempotent, d.h. es ist egal, wie oft der Request kommt - einmal reicht, öfter kann, das Ergebnis (im Hinblick auf Darstellung beim User und Zustand auf dem Server, also z.B. im Warenkorb) ist immer dasselbe.

    Wenn der Request nicht beliebig oft wiederholt werden darf, weil jeder einzelne Request etwas erneut in den Warenkorb legt: POST.

    Weitere Gründe für POST: Die Datenmenge ist so groß, dass beteiligte Systeme an die Grenze ihrer verarbeitbaren URL-Länge stoßen (es gibt keine im Standard definierte maximale Länge, was das Definieren von "zuviel Daten" schwierig macht).

    Bei großen Portalen wie z.B. Ebay, amazon werden solche Daten via GET übertrage. In vielen Foren habe ich gelesen, solche Daten niemals via GET übertragen. Gibt es vor oder Nachteile? Zu diesem Zeitpunkt werden noch keine Kundendaten übermittelt, lediglich der Preis und die Menge sowie die Artikel ID

    Große Portale haben mitunter ganz andere technische Lösungen implementiert, weil sie so groß sind, so viel Traffic haben und eine komplett andere Systemarchitektur dahintersteckt. Das kannst du mit einem kleinen PHP-Warenkorbskript keinesfalls vergleichen. "Die" haben bestimmt Gründe für ihr Vorgehen - Parallelisierbarkeit, Performance, Caching, Subsysteme etc.

    Grüße Sven