Статьи

Что такое матричные переменные Spring 3.2? – часть 1

В Spring 3.2 появилась поддержка обработки того, что называется «матричные переменные», и, вероятно, как и большинство разработчиков, я никогда о них не слышал. Итак, после некоторых исследований, этот блог — мое понимание того, что они из себя представляют и что вы можете с ними сделать. Как обычно, пожалуйста, поправьте меня, если я ошибаюсь.

Когда я впервые прочитал о них, мне в голову пришла целая куча вопросов, например:

  • Кто они такие?
  • Зачем их использовать?
  • Почему ребята в Spring думают, что они важны?
  • Почему сейчас?

Кто они такие?

Переменные матрицы, впервые появившиеся в Spring 3.2, описаны в
документации Spring . Это относится к
RFC3986 и
документу Тима Бернерса-Ли от 1996 года. Если вы используете URI- коды Google
Matrix, тогда вам не очень помогают, а между вами и RFC всегда пишутся действительно скучно, используя скучный, простой текст. , формат, который, вероятно, отговаривает людей от их чтения. Соответствующий раздел RFC3986:


Приложения, создающие URI, часто используют зарезервированные символы, разрешенные в сегменте, для разграничения подкомпонентов, специфичных для схемы или обработчика разыменования. Например, зарезервированные символы точки с запятой («;») и равенства («=») часто используются для разделения параметров и значений параметров, применимых к этому сегменту. Запятая («,») зарезервированный символ часто используется для аналогичных целей. Например, один производитель URI может использовать сегмент, такой как «name; v = 1.1», чтобы указать ссылку на версию 1.1 «name», тогда как другой может использовать сегмент, такой как «name, 1.1», чтобы указать то же самое. Типы параметров могут быть определены специфичной для схемы семантикой, но в большинстве случаев синтаксис параметра является специфическим для реализации алгоритма разыменования URI.

Из этого вы можете понять, что матричные URI являются способом указания аргументов как части URI. Теперь вы можете сказать, что я уже могу это сделать, используя параметры запроса в форме:

http://localhost:8080/myappname/mypath?var1=hello&var2=world

С точки зрения Matrix URI, я предполагаю, что это выглядит примерно так:

http://localhost:8080/myappname/mypath;var1=hello;var2=world

Итак, что еще они дают вам? Давайте на шаг вернемся назад и придумаем сценарий, для которого я напишу некоторый код в моем следующем блоге. В этом сценарии я пишу приложение для портфеля акций / акций, и это приложение получает HTTP-вызов GET, который связывается с целыми именами акций и ценами.

http://localhost:8080/spring_3_2/matrixvars/stocks;BT.A=276.70;AZN=236.0;SBRY=375.50

В этом примере у меня есть мое приложение spring_3_2 / matrixvars, в котором указаны три наименования акций: BT.A, AZN и SBRY и связанные с ними цены. Это охватывает тот же сценарий, что и выше; однако, данные о запасах не просто идут с ценами, они идут со всеми дополнительными деталями: изменение цены, процентное изменение цены и так далее. Используя запятую ‘,’ вместе с точкой с запятой, мы можем добавить эту дополнительную информацию в URI:

http://localhost:8080/spring_3_2/matrixvars/stocks;BT.A=276.70,+10.40,+3.91;AZN=236.00,+103.00,+3.29;SBRY=375.50,+7.60,+2.07

Приведенный выше URI демонстрирует, что матричные URI дают вам возможность присоединять коллекции данных к любой части URI. Говоря о
коллекциях, вы также понимаете, что данные, которые вы можете прикрепить, являются переменными и могут появляться в любом месте URI. Например, если данные, необходимые для завершения вышеуказанного URI, были неполными, я мог бы легко написать:

http://localhost:8080/spring_3_2/matrixvars/stocks;BT.A=276.70,,+3.91;AZN=236.00,+103.00;SBRY=375.50

… Отправьте его в мою заявку и сохраните силу.

Следующее, что нужно сделать, это то, что матричные переменные имеют иерархическую зависимость. В приведенном выше примере информация о запасах (например, BT.A = 276.70 ,, + 3.91) относится к
части
запасов пути URI. Это означает, что я могу добавить разные матричные переменные в разные части моего URI:

http://localhost:8080/spring_3_2/matrixvars/stocks;BT.A=276.70,,+3.91;AZN=236.00,+103.00;SBRY=375.50/account;name=roger;number=105;location=stoke-on-trent,uk

В приведенном выше примере у меня все еще есть информация о ценах на акции , относящаяся к части URI для
акций , но теперь я также добавил некоторую информацию об учетной записи, сообщая моему приложению, что у роджера, номер счета 105 из Великобритании, есть BT. А, AZN и SBRY в его портфолио. Очевидно, что информация об учетной записи относится к учетной записи моего URI.

Зачем их использовать?

Из предыдущего раздела я думаю, что вы должны быть в состоянии угадать ответ на этот. Матричные URI или Matrix Variables, как их называют парни из Spring, дают вам новый способ обработки переменного числа аргументов URI и возможность обрабатывать растущую сложность объема данных, передаваемых приложению с помощью HTTP GET.

Почему ребята в Spring думают, что они важны?

Сейчас я не могу говорить за парней весной, но, как и вы, я могу предположить, о чем они могут думать, поэтому парням весной, если я ошибаюсь, пожалуйста, дайте мне знать. Я полагаю, что они могут ответить примерно так: матричные переменные повышают гибкость URI, который может обрабатываться методом Spring @RequestMapping, тем самым удовлетворяя потребность во все более сложных и интерактивных веб-приложениях. Они также аккуратно закрывают функциональный пробел в арсенале Spring, приводя Spring в соответствие с JAX-RS, который уже поддерживает эту технологию.

Почему сейчас

Последний вопрос должен быть
почему сейчас? , В конце концов, эта идея восходит к 1996 году, так что же делает ее актуальной в современном мире? Я думаю, что ответ на этот вопрос заключается в том, что веб-приложения просят сделать. Весьма популярны страницы с высокой степенью интерактивности, страницы, которые обновляются с использованием AJAX и JSON без необходимости полного обновления экрана. JSON обеспечивает ответ на потребность в сложных ответах на запросы информации, а матричные переменные дают возможность создавать сложные запросы. В этом смысле, это может быть просто технология, время которой пришло.

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