2010-04-10 3 views
7

Je travaille sur une API qui accepte des données provenant de clients distants, dont certaines dans lesquelles la clé d'un POST HTTP fonctionne presque comme un tableau. En anglais, cela signifie que j'ai une ressource sur mon serveur appelée "class". Une classe dans ce sens est le type dans lequel se trouve un étudiant et un enseignant éduque. Lorsque l'utilisateur soumet un POST HTTP pour créer une nouvelle classe pour son application, beaucoup de paires de valeurs clés ressemblent à:Plusieurs paires clé/valeur dans HTTP POST où la clé porte le même nom

student_name : Bob Smith
nom_etudiant: Jane Smith
nom_etudiant: Chris Smith

Quelle est la meilleure façon de gérer cela aussi bien du côté client (disons que le client est cURL ou ActiveResource, quelle que soit ..) et ce qui est une façon décente de gérer cela sur le côté serveur si mon serveur est une application Ruby on Rails? Besoin d'un moyen d'autoriser plusieurs clés avec le même nom et sans aucun conflit d'espace de noms ou perte de données.

Mon exigence doit être que les données POST sont des paires clé/valeur d'urlencoded.

Répondre

20

Il y a deux façons de gérer cela, et cela dépendra de votre architecture côté client de la façon dont vous allez le faire, car les standards HTTP ne font pas que la situation est sèche.

Traditionnellement, les requêtes HTTP utilisaient simplement la même clé pour les valeurs répétées et laissaient à l'architecture du client le soin de réaliser ce qui se passait. Par exemple, vous pourriez avoir une demande de poste avec les valeurs suivantes:

student_name=Bob+Smith&student_name=Jane+Smith&student_name=Chris+Smith 

Lorsque l'architecture de réception a cette chaîne, il faudrait se rendre compte qu'il y avait plusieurs clés de student_name et agir en conséquence. Il est généralement implémenté de sorte que si vous avez une seule clé, une valeur scalaire est créée, et si vous avez des multiples de la même clé, les valeurs sont placées dans un tableau.

Les architectures côté client modernes telles que PHP et Rails utilisent cependant une syntaxe différente. Toute clé que vous voulez être lu comme un tableau obtient entre crochets ajoutés, comme celui-ci:

student_name[]=Bob+Smith&student_name[]=Jane+Smith&student_name[]=Chris+Smith 

L'architecture de réception crée une structure de tableau nommé « nom_etudiant » sans les crochets. La syntaxe des crochets résout le problème de ne pas pouvoir envoyer un tableau avec une seule valeur, ce qui n'a pas pu être traité avec la méthode "traditionnelle". Parce que vous utilisez Rails, la syntaxe du carré est la bonne façon de procéder. Si vous pensez que vous pouvez changer les architectures côté serveur ou distribuer votre code, vous pouvez rechercher des méthodes plus agnostiques, telles que le codage JSON de la chaîne envoyée, qui ajoute une surcharge, mais peut être utile si vous vous attendez à avoir à gérer.

Il y a un excellent article sur tout cela dans le contexte de JQuery Ajax parameters here.

+2

+1. Les rails params parser écraseront la valeur sauf si vous avez le [] présent. – Tilendor

0

Envoyez vos données au format XML ou JSON et analysez tout ce dont vous avez besoin.

+0

J'aurais dû préciser ci-dessus que je dois prendre en charge des paires clé/valeur codées en url, comme le fait un navigateur classique. Je vais modifier ma question pour refléter cela. – randombits

Questions connexes