OK, ich kenne bereits alle Gründe auf Papier warum ich nicht ein HTTP GET verwenden sollte, wenn ich einen RESTful-Aufruf mache, um das zu aktualisieren Status von etwas auf dem Server. Dadurch werden möglicherweise unterschiedliche Daten jedes Mal zurückgegeben. Und ich weiß, das ist falsch für die folgenden "auf Papier" Gründen:
Und ich bin sicher, dass es mehr Gründe gibt. Aber ich brauche ein konkretes einfaches Beispiel zur Rechtfertigung außer "Nun, das verstößt gegen die HTTP-Spezifikation!". ... oder zumindest hoffe ich auf einen. Ich habe auch schon die folgenden gelesen, die eher der obigen Liste entsprechen: Verstößt es gegen den RESTful, wenn ich während eines GET-Aufrufs Dinge auf den Server schreibe? & amp; HTTP POST mit URL-Abfrageparametern - gute Idee oder nicht ?
Zum Beispiel kann jemand das obige rechtfertigen und warum es falsch / schlecht / falsch ist, ein HTTP GET mit dem folgenden RESTful Call zu verwenden
%Vor%Ich weiß, dass es falsch ist, aber hoffentlich wird es helfen, ein Beispiel zu geben, um meine ursprüngliche Frage zu beantworten. Also würde das obige updateID = 5 mit AddToTotalAmount = 10 aktualisieren und dann die aktualisierten Datensätze zurückgeben. Ich kenne ein POST sollte verwendet werden, aber sagen wir, ich habe ein GET verwendet.
Wie genau und um meine Frage zu beantworten, oder kann dies ein tatsächliches Problem verursachen? Abgesehen von all den Verstößen gegen die obige Aufzählungsliste, wie kann die Verwendung eines HTTP GET zu dem oben genannten führen zu einem echten Problem? Zu oft komme ich zu einem Szenario, in dem ich Dinge rechtfertigen kann mit "Weil der Arzt das gesagt hat", aber ich brauche Rechtfertigung und ein besseres Verständnis für dieses Thema.
Danke!
Der praktische Fall, in dem Sie ein Problem haben, ist, dass HTTP GET oft wiederholt wird, wenn die HTTP-Implementierung fehlschlägt. So können Sie im wirklichen Leben Situationen bekommen, in denen das gleiche GET mehrmals vom Server empfangen wird. Wenn Ihr Update idempotent ist (was Ihrs ist), dann wird es kein Problem geben, aber wenn es nicht idempotent ist (wie zB einen Wert zu einem Betrag hinzuzufügen), könnten Sie mehrere (unerwünschte) Updates erhalten.
HTTP POST wird nie wiederholt, so dass Sie dieses Problem nie haben würden.
Wenn irgendeine Form von Suchmaschine Ihre Site spidern sollte, könnte dies Ihre Daten unbeabsichtigt verändern.
Dies passierte in der Vergangenheit mit der Desktopsuche von Google, die dazu führte, dass Personen Daten verloren haben, weil Personen Löschoperationen als GETs implementiert hatten.
Hier ist ein wichtiger Grund, dass GETs idempotent sein sollten und nicht für die Aktualisierung des Status auf dem Server in Bezug auf Cross Site Request Forgery Attacks verwendet werden sollten. Aus dem Buch: Professional ASP.NET MVC 3
Idempotente GETs
Großes Wort, sicher - aber es ist ein einfaches Konzept. Wenn ein Operation ist idempotent, sie kann mehrfach ohne ausgeführt werden Ändern des Ergebnisses. Im Allgemeinen ist eine gute Faustregel, dass Sie können Verhindern Sie eine ganze Klasse von CSRF-Angriffen, indem Sie nur Dinge in Ihrem System ändern DB oder auf Ihrer Website mit POST. Dies bedeutet Registrierung, Abmeldung, Login und so weiter. Zumindest begrenzt dies die Verwirrung Abgeordnete greift etwas an.
Ich denke, dass das Lesen dieser Ressource: Ссылка könnte für Sie hilfreich sein, um zwischen Nachrichten-API und Ressourcen-API zu unterscheiden?
Tags und Links rest http post restful-architecture get