Esposa: Quem é Roy Fielding?
Ryan: Um cara. Ele é esperto.
Esposa: Ah? O que ele fez?
Ryan: Ele ajudou a escrever os primeiros servidores da Web e, em seguida, fez uma tonelada de pesquisas explicando por que a Web funciona da maneira que funciona. O nome dele está na especificação do protocolo usado para obter páginas dos servidores para o seu navegador.
Esposa: Como isso funciona?
Ryan: A web?
Esposa: Sim.
Ryan: Hmm. Bem, é tudo realmente incrível. E o engraçado é que tudo está muito desvalorizado. O protocolo que eu estava falando, HTTP, é capaz de todo tipo de coisas legais que as pessoas ignoram por algum motivo.
Esposa: Você quer dizer http como o começo do que digito no navegador?
Ryan: Sim. Essa primeira parte informa ao navegador qual protocolo usar. O material digitado por você é um dos avanços mais importantes da história da computação.
Esposa: Por quê?
Ryan: Porque é capaz de descrever a localização de algo em qualquer lugar do mundo e em qualquer lugar do mundo. É a base da web. Você pode pensar nisso como coordenadas GPS para conhecimento e informação.
Esposa: Para páginas da web?
Ryan: Para qualquer coisa realmente. Aquele cara, Roy Fielding, fala muito sobre o que essas coisas apontam na pesquisa sobre a qual eu estava falando. A web é construída em um estilo arquitetural chamado REST. O REST fornece uma definição de recurso, que é o que essas coisas apontam.
Esposa: Uma página da web é um recurso?
Ryan: Mais ou menos . Uma página da web é uma representação de um recurso. Recursos são apenas conceitos. URLs - as coisas que você digita no navegador ...
Esposa: Eu sei o que é um URL ..
Ryan: Ah, certo. Aqueles dizem ao navegador que há um conceito em algum lugar. Um navegador pode pedir uma representação específica do conceito. Especificamente, o navegador solicita a representação do conceito na página da web.
Esposa: Que outros tipos de representações existem?
Ryan: Na verdade, representações é uma dessas coisas que não se acostuma muito. Na maioria dos casos, um recurso possui apenas uma única representação. Mas esperamos que as representações sejam usadas mais no futuro, porque há um monte de novos formatos aparecendo em todo o lugar.
Esposa: Como o que?
Ryan: Hmm. Bem, existe esse conceito que as pessoas estão chamando de Web Services. Isso significa muitas coisas diferentes para muitas pessoas diferentes, mas o conceito básico é que as máquinas podem usar a Web da mesma forma que as pessoas.
Esposa: Isso é outra coisa de robô?
Ryan: Não, na verdade não. Não quero dizer que as máquinas estejam sentadas à mesa e navegando na web. Mas os computadores podem usar esses mesmos protocolos para enviar mensagens um para o outro. Fazemos isso há muito tempo, mas nenhuma das técnicas que usamos hoje funciona bem quando você precisa conversar com todas as máquinas do mundo inteiro.
Esposa: Por que não?
Ryan: Porque eles não foram projetados para serem usados assim. Quando Fielding e seus amigos começaram a construir a web, poder conversar com qualquer máquina em qualquer lugar do mundo era uma preocupação primordial. A maioria das técnicas que usamos no trabalho para fazer com que os computadores conversem entre si não tinha esses requisitos. Você só precisava conversar com um pequeno grupo de máquinas.
Esposa: E agora você precisa conversar com todas as máquinas?
Ryan: Sim - e mais. Precisamos poder conversar com todas as máquinas sobre todas as coisas que estão em todas as outras máquinas. Portanto, precisamos de uma maneira de ter uma máquina informando a outra máquina sobre um recurso que pode estar em outra máquina.
Esposa: O que?
Ryan: Digamos que você esteja conversando com sua irmã e ela quer emprestar a vassoura ou algo assim. Mas você não tem - sua mãe tem. Então você diz à sua irmã para obtê-lo da sua mãe. Isso acontece o tempo todo na vida real e o tempo todo quando as máquinas começam a falar também.
Esposa: Então, como as máquinas se dizem onde estão as coisas?
Ryan: A URL, é claro. Se tudo o que as máquinas precisam falar tiver um URL correspondente, você criou a máquina equivalente a um substantivo. Que você e eu e o resto do mundo concordamos em falar sobre substantivos de uma certa maneira é muito importante, não é?
Esposa: Sim.
Ryan: Máquinas não têm um substantivo universal - é por isso que elas são péssimas. Toda linguagem de programação, banco de dados ou outro tipo de sistema tem uma maneira diferente de falar sobre substantivos. É por isso que o URL é tão importante. Vamos fazer com que todos esses sistemas se digam sobre os nomes um do outro.
Esposa: Mas quando estou vendo uma página da web, não penso assim.
Ryan: Ninguém faz. Exceto Fielding e um punhado de outras pessoas. É por isso que as máquinas ainda são péssimas.
Esposa: E os verbos, pronomes e adjetivos?
Ryan: Engraçado você perguntar, porque esse é outro grande aspecto do REST. Bem, os verbos são assim mesmo.
Esposa: Eu estava apenas brincando.
Ryan: Foi uma piada engraçada, mas na verdade não é uma piada. Os verbos são importantes. Existe um conceito poderoso em programação e teoria da CS chamado polimorfismo. Essa é uma maneira nerd de dizer que substantivos diferentes podem ter o mesmo verbo aplicado a eles.
Esposa: Eu não entendi.
Ryan: Bem ... Olhe para a mesa de café. Quais são os substantivos? Xícara, bandeja, jornal, controle remoto. Agora, o que você pode fazer com todas essas coisas?
Esposa: Eu não entendo ...
Ryan: Você pode pegá-los, certo? Você pode buscá-los. Você pode derrubá-los. Você pode queimá-los. Você pode aplicar esses mesmos verbos exatos a qualquer um dos objetos ali.
Esposa: Ok ... então?
Ryan: Bem, isso é importante. E se, em vez de eu poder dizer para você, "pegue a xícara" e "pegue o jornal" e "pegue o controle remoto"; e se, em vez disso, precisássemos apresentar verbos diferentes para cada um dos substantivos? Eu não conseguia usar a palavra "obter" universalmente, mas precisava criar uma nova palavra para cada combinação de verbo / substantivo.
Esposa: Uau! Isso é estranho.
Ryan: Sim, é. De certa forma, nossos cérebros são inteligentes o suficiente para saber que os mesmos verbos podem ser aplicados a muitos substantivos diferentes. Alguns verbos são mais específicos que outros e se aplicam apenas a um pequeno conjunto de substantivos. Por exemplo, não posso dirigir um copo e não posso beber um carro. Mas alguns verbos são quase universais como GET, PUT e DELETE.
Esposa: Você não pode EXCLUIR uma xícara.
Ryan: Bem, ok, mas você pode jogar fora. Essa foi outra piada, certo?
Esposa: Sim.
Ryan: Enfim, HTTP - este protocolo que Fielding e seus amigos criaram - é sobre aplicar verbos a substantivos. Por exemplo, quando você acessa uma página da web, o navegador faz um HTTP GET no URL digitado e volta uma página da web.
As páginas da Web geralmente têm imagens, certo? Esses são recursos separados. A página da web apenas especifica os URLs das imagens e o navegador acessa e realiza mais GETs HTTP nelas até que todos os recursos sejam obtidos e a página da web seja exibida. Mas o importante aqui é que tipos muito diferentes de substantivos podem ser tratados da mesma forma. Se o substantivo é uma imagem, texto, vídeo, um mp3, uma apresentação de slides, qualquer que seja. Posso obter todas essas coisas da mesma maneira, considerando um URL.
Esposa: Parece que GET é um verbo muito importante.
Ryan: Sim . Especialmente quando você está usando um navegador da Web, porque os navegadores praticamente apenas GET coisas. Eles não fazem muitos outros tipos de interação com os recursos. Isso é um problema porque levou muitas pessoas a supor que o HTTP é apenas para GETing. Mas o HTTP é realmente um protocolo de propósito geral para a aplicação de verbos aos substantivos.
Esposa: Legal. Mas ainda não vejo como isso muda alguma coisa. Que tipos de substantivos e verbos você deseja?
Ryan: Bem, os substantivos estão lá, mas não no formato certo.
Pense em quando você estiver navegando pela amazon.com procurando coisas para me comprar no Natal. Imagine cada um dos produtos como substantivos. Agora, se eles estivessem disponíveis em uma representação que uma máquina pudesse entender, você poderia fazer muitas coisas legais.
Esposa: Por que uma máquina não consegue entender uma página da web normal?
Ryan: Porque as páginas da web são projetadas para serem entendidas pelas pessoas. Uma máquina não se importa com layout e estilo. Máquinas basicamente só precisam dos dados. Idealmente, cada URL teria uma representação legível por humanos e uma legível por máquina. Quando uma máquina obtém o recurso, solicita a legível da máquina. Quando um navegador obtém um recurso para um humano, ele solicita o legível por humanos.
Esposa: Então as pessoas teriam que criar formatos de máquina para todas as suas páginas?
Ryan: Se fosse valioso.
Olha, nós conversamos sobre isso com muita abstração. Que tal dar um exemplo real. Você é professor - na escola, aposto que você tem um grande sistema de computador, ou três ou quatro sistemas de computador mais propensos a permitir que você gerencie os alunos: em quais aulas eles estão, que notas estão recebendo, contatos de emergência, informações sobre os livros dos quais você ensina etc. Se os sistemas são baseados na Web, provavelmente existe uma URL para cada um dos substantivos envolvidos aqui: aluno, professor, turma, livro, sala, etc. Agora, obtendo a URL através o navegador fornece uma página da web. Se houvesse uma representação legível por máquina para cada URL, seria trivial trancar novas ferramentas no sistema, porque todas essas informações seriam consumíveis de maneira padrão. Isso também tornaria um pouco mais fácil para cada um dos sistemas conversar entre si. Ou você pode criar um sistema estadual ou nacional que pudesse conversar com cada um dos sistemas escolares individuais para coletar as notas dos testes. As possibilidades são infinitas.
Cada um dos sistemas obteria informações um do outro usando um simples HTTP GET. Se um sistema precisar adicionar algo a outro sistema, ele usaria um POST HTTP. Se um sistema deseja atualizar algo em outro sistema, ele usa um HTTP PUT. A única coisa que resta descobrir é como devem ser os dados.
Esposa: Então é nisso que você e todas as pessoas do computador estão trabalhando agora? Decidir como devem ser os dados?
Ryan: Infelizmente, não. Em vez disso, a grande maioria está ocupada escrevendo camadas de especificações complexas para fazer essas coisas de uma maneira diferente que não é tão útil ou eloqüente. Substantivos não são universais e verbos não são polimórficos. Estamos jogando décadas de uso real em campo e técnica comprovada e começando de novo com algo que se parece muito com outros sistemas que falharam no passado. Estamos usando HTTP, mas apenas porque isso nos ajuda a conversar com nossas pessoas de rede e segurança menos. Estamos trocando simplicidade por ferramentas e assistentes chamativos.
Esposa: Por quê?
Ryan: Eu não tenho ideia.
Esposa: Por que você não diz alguma coisa?
Ryan: Talvez eu vá.