it-swarm.com.de

REST: Kann ich POST Anfrage zum Lesen von Daten verwenden?

Verstößt es gegen Best Practices, eine POST -Anforderung zum Lesen von Daten zu verwenden? Gibt es hiervon Ausnahmen? z.B. Authentifizierungsanforderungen, bei denen Sie POST Daten benötigen, um eine Leseaktion auszuführen.

Ich habe einen API-Aufruf, der viele Parameter erfordert, und es ist im Grunde eine Read Aktion. Ich kann die Anforderung GET nicht verwenden, da sie möglicherweise das URI-Limit erreicht.

Ich habe gehört, dass es gegen REST Best Practices ist, eine POST -Anforderung zum Lesen von Daten zu verwenden, und ich bevorzuge es sehr, die Best Practices zu befolgen, da die API öffentlich sein soll für die Kunden des Unternehmens zugänglich.

Wenn ich das nicht tun sollte, wie sollte ich meine API so gestalten, dass diese Fälle richtig angegangen werden?

6
Mahdi

Eine Sache, die wir dort getan haben, wo ich arbeite, ist eine "Speicher" -Dienst-API. Grundsätzlich POST ein JSON-Objekt an den Service, und es gibt eine UUID zurück. Sie senden die UUID als Abfrageparameter bei jedem nachfolgenden API-Aufruf und es werden die Parameter/Daten aus dem Speicher abgerufen Dies ist besonders praktisch, wenn Sie mehrere Anrufe mit denselben Daten tätigen, da Sie diese nur einmal senden müssen.

7
TMN

Nachdem ich einige ähnliche Fragen gelesen hatte, stellte ich fest, dass REST eigentlich nicht zur Lösung dieses Problems entwickelt wurde. Deshalb habe ich mich für JSON-RPC entschieden, sondern REST which) bietet mehr Flexibilität und scheint die richtige Lösung für diese Art von Problemen zu sein.

2
Mahdi

Ja, Sie können es zumindest mit WCF zum Laufen bringen. In MVC und der Web-API ist es etwas anders, wenn Sie Methoden wie [GET] [POST] Usw. Attribute hinzufügen.

Ich habe gehört, dass es gegen REST Best Practices ist, eine POST -Anforderung zum Lesen von Daten zu verwenden, und ich bevorzuge es sehr, die Best Practices zu befolgen, wie es die API ist soll für die Kunden des Unternehmens öffentlich zugänglich sein.

Natürlich ist es eine schlechte Praxis, POST zum Abrufen von Daten als POST zum Abrufen von Ressourcen im System, die diese nicht abrufen) zu verwenden.

Best Practices für REST

Ich habe einen API-Aufruf, der viele Parameter erfordert, und es ist im Grunde eine Leseaktion. Ich kann die GET-Anforderung nicht verwenden, da sie möglicherweise das URI-Limit erreicht.

Verwenden Sie das Array zum Senden von Parametern oder erstellen Sie Objekte, wenn Ihre Parameter zusammenhängen

2
Muhammad Raja

Verbesserung der Antwort von TMT anstelle der Verwendung eines Speicherdienstes zum Speichern von UUIDs anhand von Anforderungsparametern. Sie können stattdessen eine zustandslose API mit JSON Web Tokens schreiben. Dadurch wird das Problem der Speicherverwaltung beseitigt und die Wiederverwendung und das Caching ermöglicht.

Der Fluss sieht folgendermaßen aus:

  1. Der Client sendet ein JSON-Objekt mit Anforderungsparametern als POST -Anforderung an Ihre Tokenize-API.
  2. Die API gibt ein JSON-Web-Token zurück, das mit dem als Nutzlast bereitgestellten JSON-Objekt generiert wurde.
  3. Der Client gibt eine GET-Anforderung an Ihre tatsächliche API mit diesem Token als Parameter aus.
  4. Ihre API (oder idealerweise eine Middleware) dekodiert das Token, um die Anforderungsparameter abzurufen, und verarbeitet die Anforderung.

Diese Methode erfordert keinen Speicher.
Die Implementierung der tatsächlichen API erfordert keine besonderen Überlegungen.
Stellt sicher, dass Token unterwegs nicht manipuliert werden.
Da es keinen Status gibt, müssen Sie sich keine Sorgen über Datenkorruption machen. Caching ist viel einfacher. Das Anwenden auf mehrere APIs ist trivial und kann ohne Aufsicht eines anderen Teammitglieds erfolgen.

Denken Sie daran, dass JWT auch zu groß sein kann, wenn Ihre Nutzlast zu groß ist. Stellen Sie sicher, dass Ihre URL-Länge 2000 Zeichen nicht überschreitet. Ich habe es mit einem 1,9-KByte-JSON versucht und eine 1695-Zeichen-JWT erhalten (die mehr als genug IMO sein sollte).

1
Kasahs