it-swarm.com.de

Kann die GET-Methode für Restful API JSON-Daten verwenden?

Ich möchte nicht so lange Parameter in der URI sehen. Kann die GET-Methode JSON-Daten verwenden?

In meiner Situation muss ich das Ergebnis nach bestimmten Parametern filtern. Wenn viele Parameter vorhanden sind, kann die Länge die URI-Grenze überschreiten. Gibt es eine bewährte Methode für dieses Problem?

37
HappyLiang

Theoretisch hindert Sie nichts daran, einen Anforderungshauptteil in einer GET -Anforderung zu senden. Das HTTP-Protokoll erlaubt dies, hat jedoch keine definierte Semantik. Es liegt also an Ihnen zu dokumentieren, was genau passieren wird, wenn ein Client eine GET -Nutzlast sendet. Beispielsweise müssen Sie definieren, ob Parameter in einem JSON-Body Querystring-Parametern oder etwas ganz anderem entsprechen.

Da es jedoch keine klar definierte Semantik gibt, können Sie nicht garantieren, dass Implementierungen zwischen Ihrer Anwendung und dem Client diese berücksichtigen. Ein Server oder Proxy lehnt möglicherweise die gesamte Anforderung ab oder ignoriert den Text oder etwas anderes. Die REST Möglichkeit, mit fehlerhaften Implementierungen umzugehen, besteht darin, sie auf eine Weise zu umgehen, die von Ihrer Anwendung entkoppelt ist. Ich würde also sagen, dass Sie zwei Optionen haben, die als Best Practices gelten können.

Die einfache Möglichkeit besteht darin, POST anstelle von GET zu verwenden, wie von anderen Antworten empfohlen. Da POST nicht von HTTP standardisiert ist, müssen Sie dokumentieren, wie genau das funktionieren soll.

Eine andere Option, die ich bevorzuge, besteht darin, Ihre Anwendung zu implementieren, vorausgesetzt, die Nutzlast GET wird niemals manipuliert. Wenn eine Implementierung fehlerhaft ist, können Clients die HTTP-Methode mit X-HTTP-Method-Override Überschreiben. Dies ist eine gängige Konvention für Clients, um HTTP-Methoden mit POST zu emulieren. Wenn ein Client eine fehlerhafte Implementierung hat, kann er die GET -Anforderung als POST schreiben und die X-HTTP-Method-Override: GET - Methode senden, und Sie können eine Middleware verwenden, die von Ihrer entkoppelt ist Anwendungsimplementierung und schreibt die Methode entsprechend. Dies ist die beste Option, wenn Sie ein Purist sind.

32
Pedro Werneck

Um Ihre Frage zu beantworten, können Sie JSON in der URI als Teil einer GET-Anforderung übergeben (sofern Sie die URL codieren). In Anbetracht der Tatsache, dass Ihr Grund dafür in der Länge des URIs liegt, ist die Verwendung von JSON selbstschädlich (es werden mehr Zeichen als erforderlich eingefügt).

Ich schlage vor, Sie senden Ihre Parameter im Body einer POST Anfrage, entweder im normalen CGI-Stil (param1=val1&param2=val2) oder JSON (wird nach Erhalt von Ihrer API analysiert)

6
jfrattarola