Ich verwalte eine alte .aspx -Seite, auf der alle Daten enthalten sind Die Seite, die zum Anzeigen des Inhalts benötigt wird, wird in der URL der Anforderung GET als Teil der Abfragezeichenfolge übergeben. Das Ergebnis ist, dass die URL immer größer wird, wenn wir weitere Funktionen hinzufügen.

Ich denke darüber nach, alle Parameter von der Abfragezeichenfolge in den Hauptteil der Anforderung GET zu verschieben.

Ist es eine gute Entwurfsentscheidung und was ist der Anwendungsfall eines Körpers in einer GET -Anforderung?

Kommentare

  • Warum nicht stattdessen einfach eine POST -Anforderung verwenden?
  • Weil ich nichts erstelle oder aktualisiere. Ich rufe nur Informationen vom Server ab.
  • ' Es wird erwartet, dass GET-Anforderungen idempotent sind: Wenn Sie dieselbe URL mehrmals anfordern, erhalten Sie immer ein gleichwertiges Ergebnis. Dies, z.B. ermöglicht das Caching (was einige Browser und Proxys sehr aggressiv tun). Wenn Sie Abfrageparameter in den Anforderungshauptteil verschieben, verletzen Sie diese Erwartung. Vermeiden Sie dies daher. Sie ' richten sich auf schwer zu debuggende Probleme ein. Leider haben einige Systeme eine URL-Längenbeschränkung in der Größenordnung von einigen KB. Wenn Sie Ihre API noch entwerfen und feststellen, dass Sie mit sehr komplexen Abfragen umgehen, passt eine GraphQL-API möglicherweise besser als REST.
  • Zusätzlich zu den Aussagen von @amon wird ein Body in ein GET eingefügt Die Anfrage verstößt ausdrücklich gegen die HTTP-Spezifikation. Verwenden Sie POST.
  • @Manya In den Kommentaren zu dieser Antwort zum Stapelüberlauf wird Elasticsearch ein wenig erläutert. Beachten Sie, dass Elasticsearch normalerweise nicht direkt von Browsern verwendet wird, sondern nur von internen Anwendungen, sodass diese etwas flexibler sind – Sie haben die volle Kontrolle über den Client und das Netzwerk.

Antwort

GET-Anforderungen mit einem Body werden in den HTML-Spezifikationen unterstützt.

Siehe Frage zum Stapelüberlauf Ist diese Aussage korrekt? Die HTTP-GET-Methode hat immer keinen Nachrichtentext für eine Diskussion.

Dies ist jedoch ungewöhnlich. Sie werden die Leute mit dieser Lösung überraschen. Ein einfacher Wechsel zu einem POST ist eine bessere Idee.

Der einzige Nachteil (Vorteil?) sind ärgerliche RESTfulness-Akolythen.

Kommentare

  • Es gibt technische Nachteile, da viele Javascript-Bibliotheken keine ' unterstützt GET nicht mit einem Body. Für Datenbanken, in denen Sie eine Suche durchführen, ist es logisch, dies auf diese Weise zu tun, aber Sie würden nicht ' Es ist nicht möglich, von einer einzelnen Seiten-App aus Ihre ElasticSearch- oder SOLR-Instanz aufzurufen (die einzigen APIs, bei denen diese Kombination implementiert wurde).
  • Diese Frage sagt dasselbe: stackoverflow.com/questions/978061/http-get-with-request-body " Ja. Mit anderen Worten, jede HTTP-Anfrage Die Nachricht darf einen Nachrichtentext enthalten und muss daher Nachrichten unter diesem Gesichtspunkt analysieren. Server sem Possen für GET sind jedoch so eingeschränkt, dass ein Körper, falls vorhanden, keine semantische Bedeutung für die Anfrage hat. Die Anforderungen an das Parsen unterscheiden sich von den Anforderungen an die Methodensemantik. Also, ja, Sie können einen Körper mit GET senden, und nein, es ist niemals nützlich, dies zu tun. " Die eigentliche Antwort enthält weitere Details.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.