Web,ruby, Ajax ou qualquer outra coisa que me venha a cabeça (com prioridade para esta última)

30 abril, 2007

REST explicado à minha mulher (Tradução)

Ryan Tomayko escreveu um ensaio onde explica de forma clara o que é REST à sua mulher.

http://tomayko.com/articles/2004/12/12/rest-to-my-wife

A minha mulher: quem é Roy Fielding?

Eu: Um tipo. Brilhante.

A minha mulher: O que é que ele fez?

Eu: Ajudou a desenvolver os primeiros servidores de web e de seguida efectuou um número de investigações sobre o porquê do funcionamento da Web. O seu nome aparece no documento técnico que define o protocolo usado para recuperar as páginas de um servidor para o teu navegador.

A minha mulher: Como é que isso funciona?

Eu: A Web?

A minha mulher: Sim.

Eu: Bem, é espantoso. O caso é amusant é que é verdadeiramente subestimado. O protocolo de que falamos chama-se HTTP pode fazer muitas coisas verdadeiramente geniais que um bom número de pessoas ignora por uma ou outra razão.

A minha mulher: Queres dizer que o http como no início de uma linha que escrevo no navegador?

Eu: Sim. Essa primeira parte que diz ao navegador qual o protocolo a utilizar. Aquilo que escrever é um dos mais importantes desenvolvimentos na história da informática.

A minha mulher: Porquê?

Eu: Porque descreve a localização de qualquer coisa não importando aonde no mundo e a partir de que ponto no mundo é pedido. É o princípio fundador da Web. Uma maneira de o imaginar será as coordenadas GPS para o conhecimento e a informação.

A minha mulher: Para as páginas Web?

Eu: Não importa para quê. Verdadeiramente. Este tipo, Roy Fielding, fala disso muito nos seus trabalhos de investigação. A Web foi construída sobre um estilo de arquitectura designado por REST. REST fornece a definição de um recurso, que é aquilo que vemos na ponta.

A minha mulher: Uma página Web é um recurso?

Eu: De algum modo. Uma página Web é a representação de um recurso. Os recursos são justamente conceitos. Os URL essas coisas que escrever no navegador...

A minha mulher: Eu sei o que é um URL...

Eu: Bem. Eles dizem ao navegador que há um conceito nalgum local. Um navegador pode então pedir uma representação particular do conceito. De maneira específica, o navegador pede a representação página Web do conceito.

A minha mulherQuais são os outros tipos de representação disponíveis?

Eu: De facto, as representações são uma das coisas que são raramente usadas. Na maior parte dos casos, um recurso só tem uma única representação. Mas há a esperança que as representações seam utilizadas mais no futuro pois há um número de formatos importantes que estão a aparecer um pouco por todo o lado.

A minha mulher: Como por exemplo?

Eu: Bem, há o conceito que as pessoas designam por "serviços Web". Isto cobre coisas diferentes para pessoas diferentes mas o conceito elementar é que as máquinas poderiam utilizar a Web do mesmo modo que as pessoas o fazem.

A minha mulher: Ainda algo do género do robot?

Eu: Não propriamente. Não penso que as máquinas se sentem a uma mesa e naveguem na Web. Mas os computadores podem usar os mesmos protocolos para enviar mensagens uns aos outros. Fizemos isto há muito tempo mas nenhuma das técnicas que usamos hoje funciona muito bem devido à necessidade de termos que falar a todas as máquinas no mundo inteiro.

A minha mulher: Porquê?

Eu: Porque ainda não são concebidas para funcionarem deste modo. Quando Fielding e os seus colegas começaram a construir a Web, ser capaz de falar com todas as máquinas não importando onde no mundo era uma exigência primeira. A maior parte das técnicas que utlizamos no trabalho para fazer comunicar os computadores entre eles tinham essa exigência. Nós tinhamos só a necessidade de falar com um pequenos grupo de máquinas.

A minha mulher: E agora, temos necessidade de falar com todas as máquinas?

Eu: Sim e mais. Necessitamos de falar com todas as máquinas a propósito de todas as coisas contidas nas outras. Necessitamos de um meio pela qual uma máquina fala com outra a propósito de um recurso que poderá estar eventualmente disponível numa terceira máquina.

A minha mulher: O quê?

Eu: Digamos que falas com a tua irmã e ela te pede emprestada a bicicleta, mas que quem a tem é a vossa mãe. Donde dizes à tua irmã para falar directamente com a tua mãe. Isto sucede actualmente permanentemente na via actual e o mesmo sucede a todo o momento quando as máquinas começam a falar entre elas.

A minha mulher: Como é que as máquinas dizem umas às outras onde se encontram as coisas?

Eu: Através do URL, está claro. Se todas as coisas de que as máquinas tenham necessidade de falar possuirem um URL correspondente, criamos o equivalente máquina de um nome comum. Que tu, eu o resto do mundo tenhamos optado por falar dos nomes do mesmo modo é verdadeiramente importante, não?

A minha mulher: Sim.

Eu: As máquinas não têm nomes universais - é por isso que são nulos. Cada linguagem de programação, cada base de dados, ou um outro sistema têm uma forma diferente de falar de nomes. É por isso que os URL são tão importantes. Tal permite a todos os sistemas trocar com todos os outros a propósito dos seus nomes.

A minha mulher: Mas quando vejo uma página Web não penso desse modo.

Eu: Ninguém. Só Fielding e muito poucas outras pessoas. É por isso que as máquinas hoje continuam a ser nulas.

A minha mulher: e a propósito de verbos, pronomes e adjectivos?

Eu: Tem piada que fales disso, pois trata-se de outro aspecto importante do REST. Em todo o caso os verbos são outro aspecto do REST.

A minha mulher: Só estava a brincar.

Eu: É uma piada interessante, mas de facto não é uma piada. Os verbos são importantes. Existe um conceito poderoso em programação que a teoria de informática designa por polimorfismo. É uma maneira técnica de dizer que os diferentes nomes podem ver-se aplicados ao mesmo verbo.

A minha mulher: Já não brinco.

Eu: Bom... Vê a mesa do café. Quais são os nomes comuns? Chavena, Tabuleiro, Jornal, Controlo remoto. Agora, quais são as coisas que podes fazer com todas estas coisas?

A minha mulher: Já não brinco.

Eu: Posso apanha-las (get) certo. Podes apanhá-las. Podes bater-lhes, Podes queimá-los. Podes aplicar estes verbos exactamente a quaisquer objectos que se encontrem aí.

A minha mulher:Sim e?

Eu: Bem, isso é importante. Se em vez de te poder dizer apanha a chavena, apanha o jornal ou apanha o controlo remoto o que sucederia se tivessemos que usar verbos diferentes com cada um dos nomes? Não podia usar a palavra "apanhar" de modo universal, mas teria que pensar numa nova palavra para cada combinação verbo/nome.

A minha mulher: Oh! É estranho.

Eu: Sim. é. Os nossos cérebros são de algum modo suficientemente inteligentes para saberem que esses mesmos verbos podem ser aplicados a vários nomes diferentes. Alguns verbos são mais específicos que outros e só se aplicam a um conjunto pequeno de nomes. Por exemplo, não posso conduzir uma chavena ou beber um automóvel. Mas alguns verbos são praticamente universais como: apanhar (GET), colocar (PUT) e apagar (DELETE).

A minha mulher: Não podemos APAGAR uma chavena.

Eu: bem realmente. Mas podes atirá-la fora. Isso era outra piada. Certo?

A minha mulher: Sim.

Eu: Enfim, o protocolo HTTP que Fielding e amigos criaram é inteiramente consagrado à aplicação dos verbos sobre nomes comuns. Por exemplo, quando vais a uma página Web o navegador faz um HTTP GET do URL que escreves e de volta obtém uma página Web.

As páginas Web normalmente têm imagens, sim? Elas são recursos separados. A página Web só específica os URL para as imagens e o navegador efectua HTTP GETs suplementares de modo a que todos os recursos sejam obtidos e a página mostrada. Mas a coisa importante é que os nomes comuns de natureza muito diferente podem ser tratados do mesmo modo. Que o nome seja uma imagem, um texto, um vidéo, um mp3, um diaporama, seja o que fort. Posso obtê-los do mesmo modo com um URL.

A minha mulher: Parece que o GET é um verbo muito importante.

Eu: Sim. Particularmente quando usas um navegador Web porque os navigadores não fazer praticamente nada a não ser apanhar (GET) as xoisas. Não fazem grande coisa para além disso, poucos outros tipos de interacção com os recursos. É um problema pois tal incita numerosas pessoas a crer que o HTTP não serve para mais nada a não ser apanhar (GET) coisas. Mas o HTTP verdadeiramente é um protocolo geral para aplicar verbos sobre nomes comuns.

A minha mulher: Bom. Mas não percebo como é que isto altera algo. Que tipo de nomes e verbos queres?

Eu: Bem os nomes estão lá mas não no bom formato.

Por exemplo pensa o que sucede quando navegas num sítio como a fnac.pt para procurares coisas para me comprares pelo Natal. Imagina cada produto como sendo nomes. Agora, se estiverem disponíveis numa representação que a máquina possa compreender, poderias efectuar várias coisas interessantes.

A minha mulher: Porque é que uma máquina não pode compreender uma simples página Web ?

Eu: Porque as página Web foram escritas para serem compreendidas pelas pessoas. Uma máquina não se interesse pela apresentação e estilo. Praticamente, as máquinas só necessitam de dados. Idealmente cada URL teria uma versão legível por humanos e uma representação para máquinas. Quando a máquina apanha um recurso ela pedirá a versão apropriada legível pela máquina. Quando um navegador apanha o recurso para um humando pedirá a representação legível por um humano.

A minha mulher: Então as pessoas terão que reproduzir todas as suas páginas de modo legível pelas máquinas.

Eu: se tal foi útil. Vê, falá-mos disto com numerosas abstracções. Passemos a um exemplo concreto. És professora - na escola aposto que têm um sistema de computador grande ou três ou quatro sistemas, mais provável, que vos deixam gerir os estudantes: em que turmas se encontram, em que níveis estão, contactos de emergência, informação sobre bibliografia, etc. Se os sistemas forem baseados na Web, então é provável que haja um URL para cada um dos nomes aqui envolvidos: estudante, docente, turma, livro, sala, etc. De imediato, obter o URL através do navegador dá-te uma página Web. Se houvesse uma representação legível pela máquina de cada URL, então seria trivial encavalitar novas ferramentas no sistema porque toda a informação seria consumível de um modo padrão. Seria também fácil a cada um dos sistema falar uns com os outros. Ou poderia ser possível construir um sistema que abarcasse todo o país que fosse capaz de falar com cada um dos sistemas escolares individuais para coligir os resultados de um exame. As possibilidades não acabam.

Cada sistema iria obter informação de cada um dos outros usando simples HTTP GET. Se um sistema necessitar de adicionar algo a outro sistema, utilizaria um HTTP POST. Se um sistema quizer actualizar algo noutro sistema usa HTTP POST. A única coisa que falta e perceber como é que os dados devem parecer.

A minha mulher: Então é nisso que tu e toda a gente dos computadores está a trabalhar agora? Decidir como é que os dados devem parecer?

Eu: Infelizmente não. Em vez disso a grande maioria está ocupada a escrever camadas de especificações complexas para fazer isto de um modo diferente que não é nem tão útil nem tão inteligente. Os nomes não são universais e os verbos não são polimórficos. Estamos a deitar para o lixo décadas de utilização real em campo e técnica testadas e a começar tudo de novo com algo que se parece muito com outros sistemas que falharam no passado. Estamos a usar HTTP porque nos ajuda a falar na nossa rede. Estamos a trocar simplicidade com ferramentas espanpanantes.

A minha mulher: Porquê?

Eu: Não tenho a mínima ideia.

A minha mulher: Porque é que não dizes algo?

Eu: pode ser que diga.

Sem comentários: