Varios pares clave / valor en HTTP POST donde clave es el mismo nombre

Estoy trabajando en una API que acepta datos de clientes remotos, algunos de los cuales donde la clave en una POST HTTP casi funciona como una matriz. En inglés, lo que esto significa es que tengo un recurso en mi servidor llamado “clase”. Una clase en este sentido, es el tipo en que un estudiante se sienta y un maestro educa. Cuando el usuario envía un HTTP POST para crear una nueva clase para su aplicación, muchos de los pares de valores clave parecen:

nombre de estudiante: Bob Smith
nombre de estudiante: Jane Smith
nombre de estudiante: Chris Smith

¿Cuál es la mejor manera de manejar esto tanto en el lado del cliente (digamos que el cliente es cURL o ActiveResource, sea lo que sea) y cuál es una forma decente de manejar esto en el lado del servidor si mi servidor es una aplicación de Ruby on Rails? Necesita una forma de permitir varias claves con el mismo nombre y sin ningún conflicto de espacio de nombres o pérdida de datos.

Mi requisito debe ser que los datos POST sean pares clave / valor urlencoded.

Hay dos formas de manejar esto, y dependerá de la architecture del lado del cliente en la forma en que lo haga, ya que los estándares HTTP no hacen que la situación se resuelva.

Tradicionalmente, las solicitudes HTTP simplemente usarían la misma clave para valores repetidos, y dejarían la architecture del cliente para darse cuenta de lo que estaba pasando. Por ejemplo, podría tener una solicitud de publicación con los siguientes valores:

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

Cuando la architecture receptora obtuviera esa cadena, tendría que darse cuenta de que había varias claves de student_name y actuar en consecuencia. Normalmente se implementa de modo que si tiene una sola clave, se crea un valor escalar y, si tiene múltiplos de la misma clave, los valores se colocan en una matriz.

Sin embargo, las architectures modernas del lado del cliente, como PHP y Rails, utilizan una syntax diferente. Cualquier clave que desee que se lea como una matriz se anexa entre corchetes, como esto:

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

La architecture receptora creará una estructura de matriz llamada “student_name” sin los corchetes. La syntax entre corchetes resuelve el problema de no poder enviar una matriz con un solo valor, que no se pudo manejar con el método “tradicional”.

Debido a que está utilizando Rails, la syntax entre corchetes sería la manera de hacerlo. Si cree que puede cambiar las architectures del lado del servidor o si desea distribuir su código, puede buscar métodos más agnósticos, como la encoding JSON de la cadena que se envía, lo que agrega sobrecarga, pero puede ser útil si es una situación que espera tiene que manejar

Hay una gran publicación sobre todo esto en el contexto de los parámetros de Ajax de JQuery aquí .

Envíe sus datos como XML o JSON y analice todo lo que necesite.