WebServices RESTful
Palestra apresentada por Jim Webber (ThoughtWorks)
Introdução
Jim, que na minha opinião, foi o melhor palestrante do evento, fechou o evento falando do mesmo assunto que seria destinado a Bill Burke, WebServices RESTful. Após apresentar sua MiniBio ele apresentou os tópicos da apresentação:
- The Richardson Maturity Model;
- Web Architecture;
- Tunneling and POX;
- URI templates and CRUD Services;
- Hypermedia Formats;
- RESTful Services.
The Richardson Maturity Model
O modelo de maturidade Richardson é definido em quatro níveis:
- Level 0: SOAP, XML, RPC, POX (single URI);
- Level 1: URI tunneling (muitas URI’s, único verbo);
- Level 2: Muitas URI’s, muitos verbos (CRUD Services – Modelo Amazon S3);
- Level 3: Level 2 + Hypermedia (RESTful Services).
Web Architecture
- Conceito Web: baseada em recursos, acessada por URI’s (nunca diga URL’s: Deus mata crianças e gatos se você fizer isso, de acordo com Jim), arquivada em meios físicos, acessada por meios lógicos (WebServices) e distribuída para aplicações finais (usuários). Tudo é baseado em verbos HTTP;
- Tudo é acessado via URI’s. URI é um endereço de acesso a recurso(s) de sistema(s);
- A Web é muito poderosa: é escalável, tolerante a falhas, recuperável, tem baixo acoplamento, interface uniforme, modelo stateless e fail-over fácil;
- HTTPS é uma tecnologia madura (baseada em SSL) e deve ser aplicada na Web;
- Web != REST (não abuse da Web).
Tunneling and POX
- URI tunneling Pattern: URI’s com assinatura padrão e facilidade de manutenção, acesso e mapeamento;
- URI tunneling Strengths: muito fácil entendimento e usabilidade em outras linguagens;
- POX Pattern: como “parsear” padrões de texto, processá-los e disponibilizar as informações de envio;
- POX Strenghts: simples, apenas usa HTTP POST e XML, facilidade de reuso, sem suporte a metadados;
URI templates and CRUD Services
- Web já detém a maioria dos recursos. Deve-se usar o CRUD e pensar nele como base (Jim apresentou exemplos de sinalização de mensagens usando GET, POST, PUT, DELETE);
- CRUD é bom? Sim, mas CRUD não é REST. Modelo CRUD ainda é muito implementado para armazenar dados somente.
Hypermedia Formats & RESTful Services
- Microformatos na semântica W3C;
- RESTful services é o level 3 (media type rules!). Logo é preciso implementar formatos hypermedia e XML (e/ou Application XML) não pode conter links. Do contrário não é nível 3;
- Application /vnd.restbucks + XML: é o formato XML para hypermedia; não é padrão para a IANA;
- Links descrevem protocolos, fluxo, regra de negócio. Logo podemos pensar em “Link as API” e tudo como framework;
- Se você não tem hypermidia você não tem o RESTful;
- Use a Web para escalabilidade massiva, mas com tolerância;
- HTTP tem estados e header para todas as situações. Queremos ter baixo acoplamento e isso pode ser auxiliado por meio dos links hypermidia.
Para finalizar Jim Webber deixou um link de um artigo seu escrito para o InfoQ, contendo os mesmos exemplos da apresentação. Agradeceu a recepção e o interesse do público brasileiro. Da minha parte fica a impressão de quão incrível são os palestrantes internacionais e a desenvoltura para fazer apresentação e explanação de idéias sem igual.


