Skip to content


Uso de Hypermedia em protocolos REST

Algumas vezes amigos já me questionaram sobre o uso de Hypermedia em protocolos REST. É sem dúvida um assunto que me agrada bastante, e acho que a discussão pode trazer boas idéias para quem implementar serviços REST interessantes.

Começando do começo: o que é Hypermedia?

Hypermedia é uma extensão lógica de Hypertext, na qual conseguimos combinar gráficos, áudio, vídeo, texto plano e hyperlinks para criar um fluxo de navegação não-linear. (Definição retirada da Wikipedia).

Motivação: REST sem Hypermedia

No artigo de REST que escrevi no começo de 2008 eu falei sobre diversos aspectos importantes em um protocolo de comunicação REST. Recomendo a leitura para quem ainda não tenha visto o artigo. Naquele artigo, cobri praticamente todos os detalhes aos quais devemos prestar atenção – a exceção ficou por conta de Hypermedia.

Para ilustrar uma resposta REST sem uso de Hypermedia, copio aqui uma listagem que usei no artigo de REST da Java Magazine.

HTTP/1.1 200 OK
Date: nnn
Content-Type: text/xml; charset=utf-8
Content-Length: nnn
Last-Modified: Sat, 19 Feb 2008 13:40:03 GMT
 
<?xml version="1.0" ?>
<ofertasDoItem>
<oferta>
<codOferta>23c32440-959a-4c33-b6ee-caff8e41422a</codOferta>
<valor>111.22</valor>
<dataModificacao>2008-02-05</dataModificacao>
<item>
<codItem>b7d24e54-0c0d-4fa0-b4fe-d7cf60180ed7</codItem>
<novo>false</novo>
<vendido>false</vendido>
</item>
<ofertante>
<codUsuario>505ab9d4-4b4b-4ce6-b128-b7408268126c</codUsuario>
</ofertante>
<vencedora>false</vencedora>
</oferta>
<oferta>
<codOferta>41ffac11-5ba2-405b-acc8-8e3d0904b158</codOferta>
<valor>111.22</valor>
<dataModificacao>2008-02-14</dataModificacao>
<item>
<codItem>b7d24e54-0c0d-4fa0-b4fe-d7cf60180ed7</codItem>
<novo>false</novo>
<vendido>false</vendido>
</item>
<ofertante>
<codUsuario>505ab9d4-4b4b-4ce6-b128-b7408268126c</codUsuario>
</ofertante>
<vencedora>false</vencedora>
</oferta>
</ofertasDoItem>

Se você julga que isso parece um grafo de objetos serializado, você não está enganado, é exatamente isso.

O que temos a ganhar com Hypermedia?

Quando implementamos a API REST da autenticação/autorização/cadastro da Globo.com, o protocolo REST sem Hypermedia atendeu perfeitamente. A comunicação funcionou, permitiu integração de clientes de todas as plataformas, de forma desacoplada tecnologicamente. No que será que Hypermedia poderia ajudar?

O cerne do benefício de Hypermedia está no conhecimento prévio que os clientes devem ter sobre o seu protocolo. Repare no seguinte fragmento da resposta:

<item>
<codItem>b7d24e54-0c0d-4fa0-b4fe-d7cf60180ed7</codItem>
<novo>false</novo>
<vendido>false</vendido>
</item>

O que podemos dizer sobre ele? Ele traz informações “quase” completas sobre o item em questão. Todos os atributos estão presentes, porém não dizemos nada ao cliente sobre como interagir com este recurso, não é verdade? Um cliente que receba este XML conseguirá manipulá-lo SE JÁ SOUBER PREVIAMENTE COMO! O cliente já deve conhecer as URIs de cada recurso e saber quais manipulações ele pode fazer sobre os mesmos.

Como Hypermedia pode nos levar além? Com Hypermedia podemos dizer aos clientes como manipular os recursos, e com isso diminuir a inteligência embutida nos clientes.

Exemplo de resposta usando Hypermedia

Agora pegarei um trecho do meu artigo sobre AtomPub para exemplificar uma resposta com uso de Hypermedia:

<?xml version="1.0" encoding="UTF-8"?>
<atom:entry xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:apps="http://schemas.google.com/apps/2006"
xmlns:gd="http://schemas.google.com/g/2005">
<atom:id>https://www.google.com/a/feeds/example.com/user/2.0/SusanJones</atom:id>
<atom:updated>1970-01-01T00:00:00.000Z</atom:updated>
<atom:category scheme="http://schemas.google.com/g/2005#kind"
term="http://schemas.google.com/apps/2006#user"/>
<atom:title type="text">SusanJones</atom:title>
<atom:link rel="self" type="application/atom+xml"
href="https://www.google.com/a/feeds/example.com/user/2.0/SusanJones"/>
<atom:link rel="edit" type="application/atom+xml"
href="https://www.google.com/a/feeds/example.com/user/2.0/SusanJones"/>
<apps:login userName="SusanJones" suspended="false" admin="false" changePasswordAtNextLogin="false" agreedToTerms="true"/>
<apps:name familyName="Jones" givenName="Susan"/>
<gd:feedLink rel="http://schemas.google.com/apps/2006#user.nicknames"
href="https://www.google.com/a/feeds/example.com/nickname/2.0?
username=Susy-1321"/>
<gd:feedLink rel="http://schemas.google.com/apps/2006#user.emailLists"
href="https://www.google.com/a/feeds/example.com/emailList/2.0?
recipient=us-sales@example.com"/>
</atom:entry>

Qual é a principal diferença aqui? Através do uso de links conseguimos indicar uma URI para manipulação do recurso, e através do atributo rel, indicamos QUAL é a manipulação. Algumas coisas ainda ficam implícitas. Por exemplo, se o link indica um rel=”edit”, a manipulação em questão provavelmente será feita com uma requisição HTTP PUT. Se o link tiver um rel=”show”, a manipulação deve ser uma leitura, feita com HTTP GET.

Hypermedia x Acoplamento

Neste ponto deve ter ficado claro que o uso de Hypermedia confere maior significado ao protocolo de comunicação. Em vez de trafegar dados crus, enviamos também metadados que permitem a construção de clientes mais genéricos dos nossos serviços.

Reduzindo o conhecimento que os clientes têm sobre o servidor, naturalmente o acoplamento diminui. O servidor precisa manter fixa apenas  a URI inicial da conversação, pois as posteriores serão informadas durante a comunicação.

O servidor pode também utilizar múltiplos tipos de conteúdo, de forma que alguns clientes consigam interagir de forma mais ampla. Um exemplo seria um IPod que sabe consumir podcasts, enquanto estes seriam ignorados por um browser comum.

Precisamos de Hypermedia em um protocolo REST?

Resposta curta: na minha opinião não.

Resposta longa: espero que minha resposta curta não tenha deixado a impressão de que não valorizo Hypermedia. Muito pelo contrário, acho que um protocolo que use Hypermedia será muito elegante e terá baixo acomplamento.

Entretanto, construir protocolos para clientes genéricos é bem mais difícil. Em alguns casos a decisão de diminuir o acoplamento aumenta na mesma proporção a complexidade do protocolo de comunicação envolvido.

É perfeitamente possível criar um excelente protocolo de comunicação sem Hypermedia. Você poderá ter clientes de múltiplas plataformas, conversando com seu servidor em múltiplos formatos de conteúdo.

Há um ponto de atenção no quanto seus clientes conhecem sobre seus formatos de URIs. Sem Hypermedia, mudanças de URIs podem quebrar seus clientes, o que traz um nível de acoplamento maior do que o existente com Hypermedia.

Recomendação geral: o uso de Hypermedia é consistente com a arquitetura da web, utilizada há muitos anos com sucesso. Quando um protocolo de comunicação REST faz uso de Hypermedia, o acoplamento fica baixo e nos dá bastante liberdade para evolução. O ideal é tentar usar Hypermedia ao máximo desde o começo, mas sempre ponderando o nível de complexidade na construção dos clientes.

xml version=”1.0″ encoding=”UTF-8″?>

<atom:entry xmlns:atom=”http://www.w3.org/2005/Atom”

xmlns:apps=”http://schemas.google.com/apps/2006″

xmlns:gd=”http://schemas.google.com/g/2005″>

<atom:id>https://www.google.com/a/feeds/example.com/user/2.0/SusanJones</atom:id>

<atom:updated>1970-01-01T00:00:00.000Z</atom:updated>

<atom:category scheme=”http://schemas.google.com/g/2005#kind”

term=”http://schemas.google.com/apps/2006#user”/>

<atom:title type=”text”>SusanJones</atom:title>

<atom:link rel=”self” type=”application/atom+xml”

href=”https://www.google.com/a/feeds/example.com/user/2.0/SusanJones”/>

<atom:link rel=”edit” type=”application/atom+xml”

href=”https://www.google.com/a/feeds/example.com/user/2.0/SusanJones”/>

<apps:login userName=”SusanJones” suspended=”false” admin=”false” changePasswordAtNextLogin=”false” agreedToTerms=”true”/>

<apps:name familyName=”Jones” givenName=”Susan”/>

<gd:feedLink rel=”http://schemas.google.com/apps/2006#user.nicknames”

href=”https://www.google.com/a/feeds/example.com/nickname/2.0?

username=Susy-1321″/>

<gd:feedLink rel=”http://schemas.google.com/apps/2006#user.emailLists”

href=”https://www.google.com/a/feeds/example.com/emailList/2.0?

recipient=us-sales@example.com”/>

</atom:entry>

Posted in design.

Tagged with , , .


4 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. bruno taboada says

    Primeiramente, ótimo post.
    Perguntas:
    “O servidor pode também utilizar múltiplos tipos de conteúdo.” mudando a uri de manipulação do recurso na resposta?(Eu entendi isso.)

    REST é um estilo arquitetural certo? usando o protoco HTTP como infraestrutura padrão, definido na RFC 2616, pergunta.

    “Entretanto, construir protocolos para clientes genéricos é bem mais difícil” não entendi o que você quis dizer, gostaria de entender, no meu entender entendo que da mais trabalho ter que tratar múltiplos clientes pois como voce disse, para cada tipo de cliente(PDA´s,IPAD e etc.) eu teria que mandar uma url diferente pois a tipo de conteúdo seria outro! certo ou não?

Continuing the Discussion

  1. Tweets that mention Uso de Hypermedia em protocolos REST – Bruno Pereira -- Topsy.com linked to this post on 03/08/2010

    [...] This post was mentioned on Twitter by Gabriel Rubens and lucabastos, Bruno Pereira. Bruno Pereira said: Uso de Hypermedia em protocolos REST: http://brunopereira.org/2010/08/03/uso-de-hypermedia-em-protocolos-rest/ [...]

  2. CoreRest: Seus serviços leves na Nuvem! « Ankiewsky Blog linked to this post on 12/08/2010

    [...] Mas a idéia de REST, ainda vai também no aspecto de qual HyperMedia (formato) as informações podem ser trafegadas e exibidas, recomendo você ler o prático e objetivo artigo de Bruno Pereira sobre o assunto aqui. [...]

  3. A Concrete no QCon SP 2011 - parte 3 | Blog da Concrete linked to this post on 24/09/2011

    [...] B Bruno Pereira 2010 – Uso de Hypermedia em protocolos REST [...]



Some HTML is OK

or, reply to this post via trackback.



  • Buy Cheap what is xanax Now Free Viagra Pills! Drugs, Health And Beauty.
  • Buy Cheapest viagra order Now Pharmacy At The Best Price! Best Drugstore.
  • Buy Cheap without prescription tramadol Online Guaranteed Shipping. Pharmacy Store.
  • Buy Cheap order verapamil Online Best Internet. Internet Prices For order verapamil!
  • Buy Cheapest phentermine 30 mg Now Cheap Online Pharmacy. Best Drugstore.
  • Buy Cheapest diet pill that works Now Best Drugstore. Internet Prices For diet pill that works!
  • Buy Cheapest best buy viagra Online Low Prices. Online Prices For best buy viagra!
  • Buy Cheapest what do xanax look like Now Discount Pharmacy Online. Best Internet.
  • Buy Cheapest cialis maximum dose Now 24/Online Pharmacy. Best Drugstore.
  • Buy Cheap trimethoprim sulfamethoxazole Now Free Viagra Pills! Internet Prices For trimethoprim sulfamethoxazole!
  • Buy Cheap viagra erection duration Now 24/Online Pharmacy. Top Online Pharmacy.
  • Buy Cheapest cialis for women Now Best Drugstore. No Prescription Needed.
  • Buy Cheap valium for sale Now No Prescription Needed. 24/Online Pharmacy.
  • Buy Cheapest levitra drugs Online Cheap Pharmacy Online. Best Drugstore.
  • Buy Cheapest purchase phentermine without prescription Online Discount Drugs At Best Online Drugstore.
  • Buy Cheapest fda approved weight loss Now Buy Medications Online. Free Viagra Pills!
  • Buy Cheap medications on line Online The Largest Internet Pharmacy. Low Prices.
  • Buy Cheap lexapro benefits Now No Prescription Needed. Free Viagra Pills!
  • Buy Cheapest 37.5 phentermine online Online Best Prices. Internet Prices For 37.5 phentermine online!
  • Buy Cheap us pharmacy no prescription ambien Now Discount Pharmacy Online. Guaranteed Shipping.
  • Buy Cheapest norvasc buy Online Discount Online Pharmacy. Best Prices.
  • Buy Cheapest valium 10 Now 24/Online Pharmacy. Guaranteed Shipping.
  • Buy Cheapest buy tramadol without prescription Now Low Prices. Pharmacy At The Best Price!
  • Buy Cheap buy pain pills Online Best Internet. Drugs, Health And Beauty.
  • Buy Cheap ambien us pharmacy Now Best Online. Internet Prices For ambien us pharmacy!
  • Buy Cheapest prescription depression Now Low Prices. Discount Online Pharmacy.
  • Buy Cheapest cheap viagra soft tablet Now Cheap Prescription Drugs. Best Drugstore.
  • lorazepam dosages Online Without Prescription Low Prices. Best Internet.
  • cialis tadalafil information page Online Without Prescription WorldWide Shipping. Best Prices.
  • Buy Cheap over the counter viagra Now Online Prices For over the counter viagra! Best Drugstore.
  • Buy Cheap what does xanax look like Now Best Internet. Top Online Pharmacy Supplier.
  • Buy Cheap overnight acne treatment Online Pharmacy Store. Cheap Pharmacy Online.
  • Buy Cheap list of pain medications Online Pharmacy Store. Online Prices For list of pain medications!
  • Buying Cheap generic viagra cheap. Worldwide Rx, Good Prices. WorldWide Shipping.
  • Buying Cheap mebendazole tablets. Offshore Rx, Good Prices. Guaranteed Shipping.
  • Buy Cheap strongest otc pain reliever available Online Best Online. No Prescription Needed.
  • Buy Cheap medical discount international drug Now Guaranteed Shipping. Cheap Prescription Drugs.
  • Buy Cheapest phentermine lowest prices Now Best Online. Discount Online Pharmacy.
  • Buy Cheap phentermine with no rx Online Best Drugstore. Discount Online Pharmacy.
  • Buy Cheap cialis 5mg Online Prescription Drugs And Generic Medications.
  • Buy Cheap use of viagra Now Low Prices. Drug Store Without A Prescription.
  • Buy Cheap vitamin information Online Cheap Prescription Drugs. Best Internet.
  • Buy Cheapest cheap viagra pill Now Online Medical Shop. Cheap Online Pharmacy.
  • Buy Cheapest diazepam medication Online Pharmacy At The Best Price! Low Prices.
  • Buy Cheapest symptoms of xanax withdrawal Online Free Viagra Pills! Online Medical Shop.
  • Buy Cheap ultram rx Now 24/Online Pharmacy. Free Viagra Pills!
  • Buy Cheap treatment of arthritis Online Order Cheap Meds Without Rx. Best Online.
  • Buy Cheap online ativan Online Top Online Pharmacy. Best Drugstore.
  • order tramadol online Online Without Prescription Cheap Meds Without Prescription.
  • Buy Cheap drug sarafem Online Cheap Pharmacy Online. Pharmacy Store.
  • Buy Cheapest viagra substitute Now Buy Medications Online. WorldWide Shipping.
  • Buy Cheap order norvasc Online Online Medical Shop. WorldWide Shipping.
  • Buy Cheapest mexican rx cialis low price Now Special Prices For mexican rx cialis low price! Pharmacy Store.
  • Buy klonopin clonazepam Without Prescription Doctor. Best Internet. Low Prices.
  • Buy Cheap ultram pregnancy Now Cheap Pharmacy Online. Online Medical Shop.
  • Buy Cheapest prescription acne Now Best Drugstore. Buy Medications Online.
  • Buy Cheapest tadalafil generika Online Low Prices. Internet Prices For tadalafil generika!
  • Buy Cheapest cialis online consultation Online Top Online Pharmacy. Best Prices.
  • Buy Cheap obesity pill Online Discount Online Pharmacy. Best Prices.
  • Buy Cheap buy a weight loss program Now Best Prices. 100% Satisfaction Guaranteed.
  • Buy Cheapest dose diflucan Online Best Online. Guaranteed Shipping.
  • Buy Cheap elite pharmacy Online Top Online Pharmacy Supplier. Low Prices.
  • Buy Cheapest buy medication online fast Online Discount Online Pharmacy. Best Internet.
  • prescription weight loss medication Online Without Prescription Free Viagra Pills! Low Prices.
  • Buy Cheapest cheap diazepam site Now No Prescription Needed. Best Drugstore.
  • Buy Cheap using cialis professional Now Low Prices. No Prescription Needed For Drugs.
  • Buy Cheap free ambien Online Low Prices. The Largest Internet Pharmacy.
  • Buy Cheapest sexual impotence Online Discount Pharmacy Online. Best Internet.
  • how to get pain medicine Online Without Prescription WorldWide Shipping. Best Prices.
  • Buy Cheap canada cialis Now The Largest Internet Pharmacy. Best Internet.
  • Buy Cheap viagra and blood pressure meds Now Low Prices. Safe And Secure Payment System.
  • Buy Cheapest tramadol 50 mg tablets Now Cheap Prescription Drugs. Low Prices.
  • Buy Cheapest valtrex commercials Now Special Prices For valtrex commercials! Pharmacy Store.
  • Buy Cheap treatment of roundworms Online Low Prices. 100% Satisfaction Guaranteed.
  • Buy Cheap hair loss online stop Online Cheap Prescription Drugs. Best Online.
  • Buy Cheap top fat burners Now Pharmacy Store. Discount Online Pharmacy.
  • weight loss prescription arizona Online Without Prescription Best Prices. Pharmacy Store.
  • Buy Cheap online tramadol pharmacy Now Discount Pharmacy Online. Top Online Pharmacy.
  • Buy Cheap levitra results Online Free Viagra Pills! Cheap Online Pharmacy.
  • Buy Cheapest appetite control pills Now No Prescription Needed. Free Viagra Pills!
  • Buy buspar information Online Without Prescription. Pharmacy Store. Low Prices.
  • Buy Cheapest discount generic medications Online Pharmacy Store. Cheap Online Pharmacy.
  • Buy Cheap ambien long term use Online Special Prices For ambien long term use! Best Prices.
  • Buy Cheap chinese viagra Online Best Drugstore. No Prescription Needed.
  • Buy Cheap generic pharmacy Online Discount Online Pharmacy. Best Internet.
  • Buy Cheapest non prescription diuretic Now Guaranteed Shipping. WorldWide Shipping.
  • Buy Cheapest buy anti obesity drugs Now Drugs, Health And Beauty. Best Internet.
  • Buy Cheap levitra onlines Online Best Prices. The Largest Internet Pharmacy.
  • Buy Cheapest viagra cialis levitra comparison Online Best Drugstore. Cheap Online Pharmacy.
  • Buy Cheapest usa pharmacy Now Best Prices. Discount Pharmacy Online.
  • Buy Cheapest free trial viagra Now The Largest Internet Pharmacy. Best Prices.
  • Buy Cheap online propecia prescription Online Best Internet. No Prescription Needed.
  • Buy Cheapest buying pain medication online Now Cheap Pharmacy Online. Top Online Pharmacy.
  • Buy Cheapest online tramadol pharmacy Online 24/Online Pharmacy. Best Prices.
  • Buy Cheapest ambien purchase Now Best Drugstore. Drugs, Health And Beauty.
  • Buy Cheap what burns body fat Now 24/Internet)(safe Pharmacy. Best Prices.
  • Buying Cheapest weight loss products for women. Mexican Rx, Good Prices. Free Viagra Pills!
  • Buy Cheapest pinworms medication Online Online Medical Shop. WorldWide Shipping.
  • Buy Cheapest generic compazine Online Best Online. Discount Online Pharmacy.
  • Buy Cheap without prescription tramadol Now Online Medical Shop. Online Prices For without prescription tramadol!