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

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

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

Что является лучшим способом обработать это на обоих сторона клиента (скажем, клиент является ЗАВИХРЕНИЕМ или ActiveResource, безотносительно..) и что такое достойный способ обработать это на серверной стороне, если мой сервер является приложением Ruby on Rails? Нужен способ допускать несколько ключей с тем же именем и без любого столкновения пространства имен или потери данных.

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

7
задан randombits 10 April 2010 в 20:37
поделиться

2 ответа

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

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

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 .

21
ответ дан 6 December 2019 в 08:42
поделиться

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

0
ответ дан 6 December 2019 в 08:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: