Несколько пар ключ / значение в HTTP POST, где ключ-то же имя

Я работаю над API, который принимает данные от удаленных клиентов, некоторые из которых, где ключ в HTTP POST почти функционирует как массив. На английском языке это означает, что у меня есть ресурс на моем сервере под названием "class". Класс в этом смысле-это тип, в котором студент сидит, а учитель обучается. Когда пользователь отправляет сообщение HTTP для создания нового класса для своего приложения, Многие пары значений ключа выглядят так:

student_name: Боб Смит
student_name: Джейн Смит!--3--> student_name: Chris Smith

каков наилучший способ справиться с этим на стороне клиента (скажем, клиент cURL или ActiveResource, что угодно..) и каков достойный способ обработки этого на стороне сервера, если мой сервер-приложение Ruby on Rails? Нужен способ разрешить несколько ключей с тем же именем и без какого-либо столкновения пространства имен или потери данных.

мое требование должно заключаться в том, что данные POST являются парами ключ/значение urlencoded.

2 ответов


есть два способа справиться с этим, и это будет зависеть от вашей клиентской архитектуры, как вы это сделаете, поскольку стандарты HTTP не делают ситуацию резкой и сухой.

традиционно HTTP-запросы просто используют один и тот же ключ для повторяющихся значений и оставляют его до клиентской архитектуры, чтобы понять, что происходит. Например, у вас может быть запрос post со следующими значениями:

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

когда получающая архитектура получила эта строка, она должна была бы понять, что существует несколько ключей student_name и действовать соответственно. Обычно он реализуется так, что если у вас есть один ключ, создается скалярное значение, а если у вас есть кратные одного ключа, значения помещаются в массив.

современные клиентские архитектуры, такие как PHP и Rails, используют другой синтаксис. Любой ключ, который вы хотите прочитать в виде массива, получает квадратные скобки, например:

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

получение архитектура создаст структуру массива с именем "student_name" без скобок. Синтаксис квадратных скобок решает проблему невозможности отправки массива только с одним значением, которое не может быть обработано "традиционным" методом.

поскольку вы используете Rails, синтаксис квадратной скобки будет способом пойти. Если вы думаете, что можете переключить серверные архитектуры или хотите распространить свой код, вы можете изучить более агностические методы, такие как JSON-кодирование отправляемой строки, что добавляет накладные расходы, но может быть полезно, если это ситуация, которую вы ожидаете обработать.

есть отличный пост обо всем этом в контексте параметры jQuery Ajax здесь.


отправьте свои данные в формате XML или JSON и проанализируйте все, что вам нужно.