Como eu expliquei REST para minha esposa

Traduzido em 15 de Maio de 2008 por Edgard Arakaki

Artigo original escrito por Ryan Tomayko

Esposa: Quem é Roy Fielding?

Ryan: É um cara. Ele é esperto.

Esposa: Sério? O que ele fez?

Ryan: Ele ajudou a escrever os primeiros servidores web e então ele fez um monte de pesquisas explicando porque a web funciona como ela funciona. O nome dele está na especificação do protocolo que é usado para transferir as páginas dos servidores para o seu navegador.

Esposa: Como isso funciona?

Ryan: A web?

Esposa: Sim.

Ryan: Hmm. Bem, é realmente bastante surpreendente. Toda a graça é que é tudo muito subestimado. O protocolo que eu estava falando, HTTP, é capaz muitas coisas interessantes que as pessoas ignoram por algum motivo.

Esposa: Você diz http, como o que está no início do que eu digito no navegador?

Ryan: Sim. É a primeira parte que informa ao navegador qual protocolo utilizar. Aquele coisa que você digita é uma dos mais importantes descobertas da história da computação.

Esposa: Por que?

Ryan: Porque ele é capaz de descrever a localização de algo em qualquer lugar do mundo para qualquer lugar do mundo. Isso é a base da web. Você pode pensar nisso como coordenadas GPS para informações e conhecimento.

Esposa: Para páginas web?

Ryan: Na verdade, para qualquer coisa. Aquele cara, Roy Fielding, ele falou bastante sobre o que essas coisas referenciam naquelas pesquisas que eu estava falando. A web é construída sobre um estilo arquitetural chamado REST1. REST tem uma definição de recurso, que é o que essas coisas referenciam.

Esposa: Uma página web é um recurso?

Ryan: Quase. Uma página web é uma representação de um recurso. Recursos são apenas conceitos. As URLs – aquelas coisas que escrever no seu navegador …

Esposa: Eu sei o que uma URL é …

Ryan: Ah, certo. Aquilo diz ao navegador que existe um conceito em algum lugar. Um navegador pode então requisita uma representação específica daquele conceito. Especificamente, o navegador requisita por uma página web que represente esse conceito.

Esposa: Quais os outros tipos de representação que existem?

Ryan: Na verdade, representações são uma daquelas coisas que não são muito usadas. Na maioria dos casos, um recurso tem apenas uma representação. Mas nós esperemos que representações serão mais usadas no futuro, porque existe um monte de novos formatos surgindo por todos os lados.

Esposa: Como quais?

Ryan: Hmm. Bem, existe um conceito que as pessoas chamam de Web Service. Significa um monte de coisa diferente para um monte de pessoas diferentes, mas o conceito básico é que as máquinas podem usar a web da mesma maneira que as pessoas.

Esposa: Essa é outra coisa de robô?

Ryan: Não, na verdade não. Eu não quis dizer que as máquinas se sentarão numa mesa e navegarão pela web. Mas que computadores podem usar os mesmos protocolos para enviar mensagens uns para os outros. Nós estamos fazendo isso a bastaste tempo, mas nenhuma das técnicas que usamos hoje funcionam bem quando é necessário falar com todas as máquinas de todo o mundo.

Esposa: Por que não?

Ryan: Porque eles não foram planejados para serem usados assim. Quando Fielding e seus amigos começaram a construir a web, poder falar com qualquer máquina em qualquer lugar do mundo era de suma importância. A maioria das técnicas que usamos para fazerem os computadores se falarem não tem esses requisitos. Precisam falar apenas com pequenos grupos de máquinas.

Esposa: E agora precisam falar com todas as máquinas?

Ryan: Sim – e mais. Nós precisamos ser capazes de falar com todas as máquinas sobre todas as coisas que estão em todas as máquinas. Para isso precisamos de um modo de uma máquina contar para outra sobre um recurso que pode estar em uma terceira máquina.

Esposa: Que?

Ryan: Digamos que você esteja falando com sua irmã e ela queria o esfregão emprestado ou outra coisa. Mas você não tem. Então você diz pra sua irmã para pegar da sua mãe. Isso acontece sempre na vida real, e acontece sempre quando as máquinas começam a falar também.

Esposa: Então, como as máquinas contam para as outras onde as coisas estão?

Ryan: A URL, claro. Se tudo que a máquina precisa falar tiver uma URL correspondente, você criou o equivalente a um substantivo para as máquinas. Quando eu, você e o resto do mundo concordamos em usa os mesmos substantivos certamente vai ser uma coisa muito importante, não é?

Esposa: Sim.

Ryan: Máquinas não tem um substantivo universal – é por isso que elas são uma merda2. Todas as linguagens de programação, bancos de dados, ou outro tipo de sistema tem um jeito diferente de falar sobre substantivos. É por isso que a URL é tão importante. Ela permite que todos os sistemas contem uns para os outros sobre seus substantivos.

Esposa: Mas quando eu estou vendo uma página web, eu não penso dessa forma.

Ryan: Ninguém faz. Exceto Fielding e um punhado de outras pessoas. É por isso que as máquinas continuam sendo uma merda2.

Esposa: E os verbos, pronomes e adjetivos?

Ryan: Engraçado você ter perguntado sobre isso, pois esse é outro grande aspecto do REST. Bem, verbos pelo menos.

Esposa: Eu estava fazendo uma piada.

Ryan: Foi uma boa piada, mas na verdade não é realmente uma piada. Verbos são importantes. Existe um conceito poderoso em programação e ciência da computação chamado polimorfismo. Que é um jeito nerd3 de dizer que o mesmo verbo pode ser aplicado a diferentes substantivos.

Esposa: 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: Continuei sem entender…

Ryan: Você pode recuperá-los4, certo? Você pode pegá-los. Você pode batê-los. Você pode queimá-los. Você pode aplicar esses mesmos verbos para qualquer objeto que esteja lá.

Esposa: Ok… então?

Ryan: Bem, isso é importante. E se ao invés de ser capaz de dizer, “pegue a xícara”, “pegue o jornal” e “pegue o controle remoto” precisássemos de diferentes verbos para cada um desses substantivos? Eu não poderia usar a palavra “pegue” universalmente, mas ao invés disso tivesse que pensar numa nova palavra para cada combinação de verbo/substantivo.5

Esposa: Ei! Que estranho.

Ryan: Sim, é estranho. Mas nossos cérebros são de alguma forma espertos o suficientes para saber que alguns verbos podem ser aplicados a vários diferentes substantivos. Alguns verbos são mais específicos que outros e aplicam-se apenas a um pequeno grupo de substantivos. Por exemplo, não posso dirigir uma xícara ou beber um carro. Mas alguns verbos são quase universais como recuperar (GET), colocar (PUT) e apagar (DELETE).

Esposa: Você não pode apagar uma xícara.

Ryan: Bem, certo, mas você pode jogar fora. Isso foi outra piada, não?

Esposa: Sim.

Ryan: Então, HTTP – esse protocolo que Fielding e seus amigos criaram – é sobre aplicar verbos a substantivos. Por exemplo, quando você acessa uma página web, o navegador faz um requisição HTTP GET na URL que você digitou, e devolve uma página web.

Páginas web geralmente têm imagens, certo? Isso são recursos separados. A página web apenas especifica as URLs das imagens e o navegador faz mais requisições HTTP GETs sobre elas, até todos os recursos serem obtidos e a página web então é mostrada. Mas o importante aqui é que tipos bem diferentes de substantivos são tratados da mesma forma. Sendo o substantivo uma imagem, texto, vídeo, um mp3, uma apresentação de slides, ou qualquer outra coisa. Eu posso recuperar todas essas coisas com GET da mesma forma sabendo sua URL.

Esposa: Parece que recuperar (GET) é um verbo bem importante.

Ryan: Sim, ele é. Especialmente quando você está usando um navegador web, pois navegadores são basicamente só recuperam as coisas com GET. Eles não fazem outros tipos de interação com recursos. Isso é um problema pois fez muitas pessoas acharem que HTTP é apenas recuperar recursos. Mas HTTP é na verdade um protocolo com propósito de aplicar verbos em substantivos.

Esposa: Legal. Mas eu ainda não vi como isso muda alguma coisa. Que tipos de substantivos e verbos você precisa?

Ryan: Bem, os substantivos estão lá, mas não no formato certo.

Pense em quando você está navegando na amazon.com procurando presentes para me dar no Natal. Imagine cada produto sendo um substantivo. Agora, se eles estivesse disponíveis numa representação que as máquinas pudessem entender, você poderia fazer um monte de coisas interessantes.

Esposa: Por que uma máquina não pode entender um página web?

Ryan: Porque as páginas web são planejadas para serem entendidas por pessoas. Uma máquina não se importa com layout e estilo. Máquinas basicamente só precisam dos dados. Idealmente, cada URL poderia ter uma representação legível para humanos e uma legível para máquinas. Quando uma máquina recupera (GET) um recurso para humanos, ela irá requisitará um recurso legível para humanos.

Esposa: Então as pessoas precisam fazer formatos de máquina para todas as suas páginas?

Ryan: Se elas tiverem valor.

Olhe, falamos sobre isso com muitas abstrações. Que tal um exemplo real. Você é uma professora – na escola, eu aposto que vocês têm um grande sistema de computador, ou 3 ou 4 sistemas provavelmente, que permite gerenciar alunos: em quais matérias eles estão matriculados, qual as notas que eles tiraram, contatos de emergência, informações sobre livros que você usa, etc. Se esses sistemas são sistemas web, então existe uma URL para cada substantivo envolvido aqui: aluno, professor, aula, livro, sala, etc. Agora, requisitando a URL através do navegador você tem uma página web. Se existisse uma representação legível ao computador para cada URL, então seria trivial criar novas ferramentas para o sistema, pois toda informação seria absorvida de um jeito padrão. Além de ser possível de uma maneira fácil que os sistemas conversem entre si. Ou, seria possível construir um sistema estadual ou nacional que seria capaz de se comunicar com cada escola e coletar as notas das provas. As possibilidades são infindáveis.

Cada um desses sistemas recuperaria informação dos outros usando um simples HTTP GET. Se um dos sistemas necessitar adicionar algo a outro, ele usaria um HTTP POST. Se um sistema quiser atualizar algo em outro sistema, ele usaria um HTTP PUT. A única coisa que falta descobrir é como esses dados devem ser.

Esposa: Então é isso que você e todas essas pessoas de computação estão trabalhando nesse momento? Decidindo como os dados devem ser estruturados?

Ryan: Infelizmente não. Ao invés disso a grande maioria está escrevendo camadas de especificações complexas para fazer as coisas de um jeito diferente que não é tão útil ou eloqüente. Substantivos não são universais e verbos não são polimórficos. Nós estamos jogando décadas de uso de uma área e de uma técnica comprovada e iniciando com algo que se parece bastante com outros sistemas que falharam no passado. Nós estamos usando HTTP, mas apenas porque ele nos ajuda a falar menos com as pessoas de redes e de segurança. Estamos trocando a simplicidade por ferramentas e assistentes chamativos.6.

Esposa: Por que?

Ryan: Não faço a menor idéia.

Esposa: Por que você não diz algo?

Ryan: Talvez eu direi.

Notas do tradutor

  1. o link para o artigo em português é esse: wikipedia
  2. “uma merda” foi a melhor tradução que eu achei pra sucks
  3. originalmente geek
  4. originalmente get
  5. o verbo “pegar” foi usado para traduzir get
  6. wizard foi traduzido como assistente, conforme a sugestão do Ederson Peka.

11 Respostas to “Tradução de “How I Explained REST to My Wife””

  1. Ederson Peka Says:

    “Wizard” não pode ser “assistente”?! :-/

    Excelente o texto.

  2. Edgard Says:

    Ederson, obrigado pela sugestão, o texto já foi atualizado.

  3. ACdeSouza Says:

    Em:
    “Ryan: Bem … ***Se parece com uma*** mesa de café. Quais são os substantivos? Xícara, bandeja, jornal, controle remoto. Agora, o que você pode fazer com todas essas coisas?”

    Acredito que ele quis dizer:
    “Ryan: Bem … ***Olhe para a*** mesa do café. Quais são os substantivos? Xícara, bandeja, jornal, controle remoto. Agora, o que você pode fazer com todas essas coisas?”

    [],
    AC

  4. Edgard Says:

    Realmente, errei feio, já está corrigido, obrigado pelo aviso.


  5. Olá,
    Quem sabe em vez de “uma m…” , você possa utilizar “uma droga” ou “uma porcaria” e manter boa parte do impacto, sem contranger ninguém. Mesmo porque, em inglês, teria sido usado “bullsh…” ou “sh…”.
    Bom trabaho!
    Boa sorte!
    André Felipe

  6. akantos Says:

    Texto sexista e idiota! Pena que no site original não pude comentar.
    Anyway, parabéns pela traduação!

  7. Ane Says:

    Hahaha essa conversa parece até meu marido eu eu hahaha. Eu designer e ele Desenvolvedor e Analista de Sistemas


  8. […] A bibliografia a respeito de REST é vasta. A última dica sobre o assunto é conferir a tradução de um texto que é muito bom e engraçado: Como eu expliquei REST para a minha esposa. […]

  9. Luiz Stacio Says:

    Excelente

  10. victor659 Says:

    **Você é um professora**
    você queria dizer : ” Você é uma professora” ?
    muito interessante o artigo.


Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

%d blogueiros gostam disto: