Mehrere Schlüssel / Wert-Paare in HTTP POST, bei denen der Schlüssel den gleichen Namen hat

7

Ich arbeite an einer API, die Daten von entfernten Clients akzeptiert, von denen einige den Schlüssel in einem HTTP-POST fast wie ein Array funktionieren. In Englisch bedeutet dies, dass ich eine Ressource auf meinem Server namens "Klasse" habe. Eine Klasse in diesem Sinne ist der Typ, in dem ein Schüler sitzt und ein Lehrer erzieht. Wenn der Benutzer einen HTTP-POST einreicht, um eine neue Klasse für seine Anwendung zu erstellen, sehen viele der Schlüsselwertpaare wie folgt aus:

Studentenname: Bob Smith
student_name: Jane Smith
student_name: Chris Smith

Was ist der beste Weg, dies auf der Client-Seite zu handhaben (sagen wir, der Client ist cURL oder ActiveResource, was auch immer ..) und was ist ein vernünftiger Weg, dies auf der Serverseite zu behandeln, wenn mein Server ein Ruby on Rails ist App? Suchen Sie nach einer Möglichkeit, mehrere Schlüssel mit demselben Namen und ohne Namespace-Konflikt oder Datenverlust zuzulassen.

Meine Anforderung muss sein, dass die POST-Daten urlencodierte Schlüssel / Wert-Paare sind.

    
randombits 10.04.2010, 20:01
quelle

2 Antworten

21

Es gibt zwei Möglichkeiten, dies zu handhaben, und es hängt von Ihrer clientseitigen Architektur ab, wie Sie vorgehen, da die HTTP-Standards die Situation nicht abkürzen und austrocknen.

Traditionell würden HTTP-Anfragen einfach denselben Schlüssel für wiederholte Werte verwenden und es der Client-Architektur überlassen, zu erkennen, was vor sich ging. Zum Beispiel könnten Sie eine Post-Anfrage mit den folgenden Werten haben:

%Vor%

Wenn die Empfangsarchitektur diese Zeichenfolge erhalten hat, müsste sie erkennen, dass es mehrere Schlüssel von student_name gibt, und entsprechend handeln. Es wird normalerweise so implementiert, dass bei Verwendung eines einzelnen Schlüssels ein Skalarwert erstellt wird. Wenn Sie ein Vielfaches desselben Schlüssels verwenden, werden die Werte in ein Array eingefügt.

Moderne clientseitige Architekturen wie PHP und Rails verwenden jedoch eine andere Syntax. Jeder Schlüssel, der als Array eingelesen werden soll, wird mit eckigen Klammern versehen:

%Vor%

Die empfangende Architektur erstellt eine Array-Struktur namens "student_name" ohne die Klammern. Die eckige Klammer-Syntax löst das Problem, ein Array nicht mit einem einzigen Wert zu senden, der nicht mit der "traditionellen" Methode behandelt werden kann.

Da Sie Rails verwenden, ist die eckige Klammer-Syntax die richtige Wahl. Wenn Sie der Meinung sind, dass Sie serverseitige Architekturen wechseln oder Ihren Code verteilen möchten, könnten Sie eher agnostische Methoden wie JSON-Codierung für die zu sendende Zeichenfolge verwenden, was zusätzlichen Aufwand bedeutet, aber in Situationen, die Sie erwarten muss umgehen.

Im Zusammenhang mit JQuery Ajax-Parametern hier gibt es einen großartigen Beitrag zu all dem >.

    
zombat 10.04.2010, 20:52
quelle
0

Senden Sie Ihre Daten als XML oder JSON und parsen Sie, was immer Sie benötigen.

    
Azeem.Butt 10.04.2010 20:27
quelle