Com meu ingresso na Voiza e popularização do REST comecei a estudar melhor os conceitos e formas de aplicação desta estratégia, usada para desenhar e implementar aplicações com baixo acoplamento e que facilitem o intercâmbio de informações com outras aplicações.
Os protocolos utilizados, do nível mais baixo ao mais alto, não são o que definem se a aplicação é REST, mas comumente vemos a estratégia sendo implementada sobre o protocolo HTTP e, claro, sendo transportado pela pilha TCP/IP. Assim sendo, a implementação de REST sobre HTTP (HTTP RESTful) deve seguir a especificação do protocolo, usar os métodos HTTP (OPTIONS, GET, POST, DELETE, PUT, etc), mime-type adequado, cache, ser stateless, etc. Para quem no conhece o protocolo e deseja implementar alguma aplicação web-based, sugiro a leitura da RFC 2616: http://www.ietf.org/rfc/rfc2616.txt
Depois de ler a respeito, ver estratégias de implementação, testar algumas estratégias home made, ler a especificação na JSR e conversar com alguns colegas de trabalho -como o "bergamota" que usou Ruby On Rails (que é RESTful a partir da 2 versão)-, alguns pontos me deixaram com a "pulga atrás da orelha", Kent Beck diria que detectei mau cheiro (http://en.wikipedia.org/wiki/Code_smell), por que parece muito complicado implementar o REST seguindo tudo a risca.
Então comecei a procurar as boas práticas REST, como patterns, soluções de problemas conhecidos, etc, e também as más práticas, anti-patterns, estratgias de desenho e implementao a evitar, e foi assim que encontrei este excelente artigo do Stefan Tilkov, j meio antigo (2008), que fala de Anti-Patterns REST, ou seja, o que evitar, no fazer, na hora de desenhar e implementar aplicaes REST com HTTP, chamado pelo autor de RESTful HTTP.
Os 8 tópicos seguem abaixo (traduções melhores são bem-vindas):
- Tunneling everything through GET (empacotar todas as chamadas através do método GET)
- Tunneling everything through POST (empacotar todas as chamadas através do método POST)
- Ignoring caching (ignorar o caching)
- Ignoring response codes (ignorar os códigos de resposta HTTP -ver RFC-)
- Misusing cookies (usar inadequadamente os cookies)
- Forgetting hypermedia (esquecer a hipermídia)
- Ignoring MIME types (ignorar os tipos MIME)
- Breaking self-descriptiveness (quebrar a auto-descritividade)
O artigo na íntegra, com o uso correto e soluções recomendadas para cada tópico, pode ser lido aqui:
http://www.infoq.com/articles/rest-anti-patterns
Para entender melhor REST sugiro este artigo, tambm na infoQ:
http://www.infoq.com/articles/rest-introduction
Particularmente, concordo com os pontos colocados no artigo, e penso que serve de bom norteador para alguém que, como eu, é iniciante em REST.
Se interessar, aqui tem um apresentação falando sobre uma implementação real: http://www.infoq.com/presentations/REST-Financial-Service-Phillip-Ghadir onde o projeto começou com SOAP/WSDL/WS-* e mais tarde migrado para REST/APP usando o Atom Publish Protocol (APP) para expor os serviços (isto antes de inventarem o WADL anlogo ao WSDL). Foi o melhor exemplo de algo prático que encontrei.
Nenhum comentário:
Postar um comentário