Откуда взялось это соглашение о параметрах Ruby? - PullRequest
7 голосов
/ 28 сентября 2011

Существует часть промежуточного программного обеспечения Ruby, используемого Rails и другими средами для анализа параметров, отправленных на сервер, во вложенный объект Hash.

Если вы отправите эти параметры на сервер:

person[id] = 1
person[name] = Joe Blow
person[email] = joe.blow@test.com
person[address][street_address] = 123 Somewhere St.
person[address][city] = Chicago
person[address][zip] = 12345
person[other_field][] = 1
person[other_field][] = 2
person[other_field][] = 3

Они разбираются на это:

{
  :person => {
    :id => "1",
    :name => "Joe Blow",
    :email => "joe.blow@test.com",
    :address => {
      :street_address => "123 Somewhere St.",
      :city => "Chicago",
      :state => "IL",
      :zip => "12345"
    },
    :other_field => [ 1, 2, 3 ]
  }
}

Я считаю, что это также поддерживается PHP. Кто-нибудь может мне сказать, как называется это соглашение, откуда оно взято и какие языки его поддерживают? (Perl, Python и т. Д.)

Ответы [ 3 ]

7 голосов
/ 01 октября 2011

Полевые исследования

Я пытаюсь выяснить, есть ли название для этого соглашения, но я пока не могу его найти.

рубин

Для этого стоит промежуточное программное обеспечение, которое делает это в Ruby Rack::Utils. См источник на Github .

Дополнительная информация по теме содержится в Руководствах по Ruby on Rails .

И вот интересный билет о коде, перемещаемом из Rails в промежуточное программное обеспечение Rack.

PHP

Я немного покопался в исходном тексте PHP, и кажется, что вся магия там происходит в исходном файле main/php_variables.c. Код SAPI вызывает метод php_std_post_handler, определенный здесь. В конечном итоге это вызывает метод php_register_variable_ex, который представляет собой 185 строк сложного синтаксического анализа строк в C (я должен признать, что C не моя сильная сторона).

Единственное имя, которое я смог найти здесь, было php_std_post_handler, стандартный обработчик POST PHP .

Python

В Python этот формат не поддерживается по умолчанию. См. этот вопрос здесь на stackoverflow.com по теме.

Perl

Библиотека CGI в Perl также не поддерживает этот формат. Это дает легкий доступ к одному или нескольким значениям, но не к вложенным значениям, как в вашем примере. См. Документацию по выборке значения или значений одного именованного параметра и извлечению списка параметров в виде хеша .

Java

Ознакомьтесь с горячими дебатами по поводу разбора параметров запроса в этот вопрос . Java не разбирает этот «вложенный формат» параметров POST в структуру данных по умолчанию.

Заключение

Я изучил это и не нашел ни одного имени для этого способа анализа параметров. Из всех языков, на которые я смотрел, только Ruby и PHP поддерживают этот формат изначально.

2 голосов
/ 02 октября 2011

Это не называется ничем, AFAIK, кроме "отправки параметров". Во всяком случае, это называется «преобразованием параметра [типа]», где Rails просто «конвертирует» его в хеш.

Другие структуры идут дальше, используя имена параметров в качестве выражений, используемых для создания типизированных объектов, инициализированных со значениями параметров, преобразованными типами.

Все параметры являются строковыми значениями с именем. Любая / вся структура навязывается языком / структурой, используемой на стороне сервера; то, в что оно преобразуется, на 100% зависит от этого языка / структуры, и то, из чего состоит это преобразование, будет определять, как оно (разумно) будет называться.

0 голосов
/ 28 сентября 2011

это будет объект JSON, который является вполне стандартным и поддерживается большинством языков / библиотек в наши дни.

...