Back-End

11 out, 2013

O que são variáveis Matrix para Spring 3.2? – Parte 01

Publicidade

O Spring 3.2 introduziu suporte para o processamento de algo chamado ‘variáveis Matrix’ e, provavelmente, como a maioria dos desenvolvedores, eu nunca tinha ouvido falar delas. Assim, depois de algumas pesquisas, este artigo é o meu entendimento do que são e do que você pode fazer com elas. Como de costume, não hesite em me corrigir se eu estiver errado por favor.

Quando li pela primeira vez sobre elas, um monte de perguntas veio à minha cabeça, por exemplo:

  • O que são elas?
  • Por que usá-las?
  • Por que os caras do Spring acham que elas são importantes?
  • Por que agora?

O que são elas?

Variáveis Matrix, novas para Spring 3.2, estão descritas na documentação do Spring. Isso se refere a RFC3986 e a um documento de Tim Berners-Lee de 1996. Se você colocar no Google Matrix URIs, você não vai conseguir muita ajuda e, entre nós, RFCs são sempre escritas de uma maneira muito chata usando um formato simples e maçante, o que provavelmente desencoraja as pessoas a lê-los. A seção relevante da RFC3986 é:

URI que produz aplicações costumam usar os caracteres reservados permitidos em um segmento para delimitar subcomponentes específicos de esquema ou de desreferência de manipulador específico. Por exemplo, os caracteres reservados ponto e vírgula (“;”) e igual (“=”) são muitas vezes utilizados para delimitar parâmetros e valores de parâmetros aplicáveis a esse segmento. O caractere reservado vírgula (“,”) é muitas vezes usado para fins semelhantes. Por exemplo, um produtor de URI pode utilizar um segmento como “name;v=1.1” para indicar uma referência para a versão 1.1 de “name”, enquanto outro pode utilizar um segmento como “name,1.1” para indicar o mesmo. Tipos de parâmetros podem ser definidos pela semântica específica do sistema, mas na maioria dos casos a sintaxe de um parâmetro é específica para a execução do algoritmo de diferenciação do URI.

Com isso, você pode entender que Matrix URIs são uma forma de especificar argumentos como parte de um URI. Agora, você pode dizer, eu já posso fazer isso usando os parâmetros da requisição do formulário:

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

Em termos de Matrix URIs, eu acho que isso se traduz em algo como:

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

Então, o que mais elas fornecem? Vamos dar um passo para trás por um momento e chegar a um cenário para o qual eu vou escrever algum código em meu próximo artigo. Nesse cenário, eu estou escrevendo uma aplicação de portfólio e carteira de ações, e esse aplicativo recebe uma chamada HTTP GET que tem os nomes de um monte de ações como um todo e os preços ligados a eles.

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

Nesse exemplo, eu tenho meu aplicativo spring_3_2/matrixvars que especifica três nomes de ações ‘BT.A’, ‘AZN’ e ‘SBRY’ e seus preços associados. Isso cobre o mesmo cenário acima, no entanto, dados de ações não vêm apenas com os preços, mas com todos os tipos de detalhes opcionais: mudança no preço, modificação percentual no preço, e assim por diante. Usando uma vírgula “,” juntamente com o ponto e vírgula, podemos acrescentar essa informação adicional no 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

O URI acima demonstra que Matrix URIs lhe dão a capacidade de anexar coletas de dados para qualquer parte do URI. Ao dizer coleções, você também tem a ideia de que os dados que você pode anexar são variáveis e podem aparecer em qualquer lugar do URI. Por exemplo, se os dados necessários para completar o URI acima estavam incompletos, eu poderia facilmente escrever:

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

… submetê-lo ao meu pedido e ainda ser válido.

O próximo ponto a destacar é que as variáveis matrix têm uma dependência hierárquica. No exemplo acima, as informações de carteira de ações (por exemplo: BT.A=276.70,,+3.91) refere-se à parte stoke do caminho URI. Isso significa que eu posso acrescentar diferentes variáveis de matriz para diferentes partes do meu 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

No exemplo acima, eu ainda tenho minhas informações de preço das ações, relativas à parte stokes do URI, mas agora eu também adicionei algumas informações da conta, informando ao meu aplicativo roger, conta número 105 do Reino Unido, tem BT.A, AZN e SBRY em seu portfolio. Obviamente, as informações de conta referem-se à parte account do meu URI.

Por que usá-las?

Na seção anterior, acho que você foi capaz de adivinhar a resposta para esta pergunta. Matrix URIs ou variáveis Matrix, como os caras do Spring os chamam, te darão uma nova forma de lidar com um número variável de argumentos URI e a capacidade de lidar com a crescente complexidade da quantidade de dados que são passados para um aplicativo usando um HTTP GET.

Por que os caras do Spring acham que eles são importantes?

Eu não posso falar para os caras do Spring, mas, como você, posso dar um palpite sobre o que eles podem estar pensando. Eu imagino que eles possam responder a algo como isto: variáveis Matrix aumentam a flexibilidade no URI que pode ser processado por um método @RequestMapping, atendendo assim à demanda por aplicações web cada vez mais complexas e altamente interativas. Eles também ordenadamente fecham uma lacuna de funcionalidade no arsenal Spring, trazendo o Spring a ficar em linha com JAX-RS, que já suporta essa tecnologia.

Por que agora?

A última pergunta tem que ser “por que agora?”. Depois de toda essa ideia remontar a 1996, então o que faz com que ela seja relevante para o mundo de hoje? Eu acho que a resposta a essa questão reside em que as aplicações web estão sendo solicitadas. Páginas altamente interativas são toda a raiva, páginas que são atualizadas usando AJAX e JSON sem a necessidade de uma atualização de tela cheia. JSON fornece a resposta para necessidade de complexas respostas aos pedidos de informações, e variáveis Matrix lhe dão a capacidade de enquadrar os pedidos complexos. Nesse sentido, essa pode ser apenas a tecnologia cuja hora chegou.

Tudo que eu preciso agora é algum código para demonstrar o meu cenário de carteira de ações, mas mais sobre isso na próxima vez.

***

Artigo traduzido pela Redação iMasters, com autorização do autor. Publicado originalmente em http://www.captaindebug.com/2013/04/just-what-are-spring-32-matrix.html#.UdR8sflwrng