it-swarm.com.de

Richtige Methode zum Übergeben mehrerer Werte für denselben Parameternamen in der GET-Anforderung

Ich suche nach der richtigen Möglichkeit, mehrere Werte für denselben Parameternamen in einer GET-Anforderung zu übergeben.

Ich habe URLs wie diese gesehen:

http://server/action?id=a&id=b

Und ich habe URLs wie diese gesehen:

http://server/action?id=a,b

Meines Wissens ist das erste richtig, aber ich kann keinen Hinweis dafür finden. Ich habe mir die http-Spezifikation angesehen, konnte aber nichts darüber herausfinden, wie der 'Abfrage'-Teil einer URL aufgebaut sein sollte.

Ich möchte keine Antwort, die besagt, dass "entweder in Ordnung" ist. Wenn ich einen Webservice erstelle, möchte ich wissen, welche dieser Methoden Standard ist, damit Benutzer, die meinen Webservice verwenden, wissen, wie mehrere Parameter für denselben Namen übergeben werden.

Kann mich jemand auf eine offizielle Referenzquelle verweisen, um zu bestätigen, welche Option korrekt ist?

159
stripybadger

In der Tat gibt es keinen definierten Standard. Um diese Informationen zu unterstützen, werfen Sie einen Blick auf Wikipedia im Kapitel Query String . Es gibt folgenden Kommentar:

Während es keinen definitiven Standard gibt, erlauben die meisten Web-Frameworks die Zuordnung mehrerer Werte zu einem einzelnen Feld. [3][4]

Wenn Sie sich außerdem RFC 3986 ansehen, gibt es in Abschnitt .4 Query keine Definition für Parameter mit mehreren Werten.

Die meisten Anwendungen verwenden die erste von Ihnen angezeigte Option: http://server/action?id=a&id=b. Schauen Sie sich zur Unterstützung dieser Informationen diese Stackoverflow-Link und diese MSDN-Link in Bezug auf ASP.NET-Anwendungen an, die denselben Standard für Parameter mit mehreren Werten verwenden.

Da Sie jedoch die APIs entwickeln, sollten Sie das tun, was für Sie am einfachsten ist, da der Aufrufer der API keine großen Probleme beim Erstellen der Abfragezeichenfolge hat.

137

Ich würde vorschlagen, sich anzuschauen, wie Browser standardmäßig mit Formularen umgehen. Schauen Sie sich zum Beispiel das Formularelement <select multiple> An und wie es mit mehreren Werten aus diesem Beispiel in w3schools umgeht.

<form action="/action_page.php">
<select name="cars" multiple>
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="opel">Opel</option>
  <option value="audi">Audi</option>
</select>
<input type="submit">
</form>

Für PHP verwenden Sie:

<select name="cars[]" multiple>

Live-Beispiel von oben bei w3schools.com

Wenn Sie von oben auf "saab, opel" klicken und auf "submit" klicken, wird ein Ergebnis von cars = saab & cars = opel generiert. Dann sollte der Parameter cars je nach Back-End-Server als Array erscheinen, das Sie weiterverarbeiten können.

Ich hoffe, dies hilft allen, die nach einer "Standard" -Methode suchen, um dieses Problem zu lösen.

1
phanf