O REST deve ser usado se for muito importante minimizar o acoplamento entre os componentes do cliente e do servidor em um aplicativo distribuído.
Pode ser esse o caso se o servidor for usado por muitos clientes diferentes sobre os quais você não tem controle. Também pode ser o caso se você deseja atualizar o servidor regularmente sem precisar atualizar o software cliente.
Posso garantir que não é fácil alcançar esse baixo nível de acoplamento . É essencial seguir todas as restrições do REST para ter sucesso. É difícil manter uma conexão puramente sem estado. Escolher os tipos de mídia certos e compactar seus dados nos formatos é complicado. Criar seus próprios tipos de mídia pode ser ainda mais difícil.
Adaptar o comportamento rico do servidor à interface HTTP uniforme pode ser confuso e às vezes parece pedante em comparação com a abordagem RPC relativamente direta.
Apesar das dificuldades, os benefícios são que você possui um serviço que um desenvolvedor cliente deve entender facilmente devido ao uso consistente do protocolo HTTP. O serviço deve ser facilmente detectável devido à hipermídia e o cliente deve ser extremamente resiliente às alterações no servidor .
Os benefícios da hipermídia e a evitação do estado da sessão tornam o balanceamento de carga simples e o particionamento de serviços viável . A estrita conformidade com as regras HTTP torna maravilhosa a disponibilidade de ferramentas como depuradores e proxies de cache.
Atualizar
Parece-me que o REST é outra 'última palavra da moda' (ou posso estar totalmente errado, porque nunca vi o REST na prática).
Acho que o REST se tornou moda porque as pessoas que tentam fazer projetos do tipo SOA descobriram que, usando a pilha SOAP, elas não estão percebendo os benefícios prometidos. As pessoas continuam voltando para a web como um exemplo de metodologias simples de integração. Infelizmente, acho que as pessoas subestimam a quantidade de planejamento e previsão necessárias para criar a web e simplificam demais o que precisa ser feito para permitir o tipo de reutilização acidental que ocorre na web.
Você diz que nunca viu o REST na prática, mas isso não pode ser verdade se você usar um navegador da Web. O navegador da web é um cliente REST.
- Por que você não precisa fazer uma atualização do navegador quando alguém altera algum html em um site?
- Por que posso adicionar um novo conjunto completo de páginas a um site e o "cliente" ainda pode acessar essas novas páginas sem uma atualização?
- Por que não preciso fornecer uma "linguagem de descrição de serviço" ao navegador da Web para informar quando acessar http://example.org/images/cat que o tipo de retorno será uma imagem jpeg e quando você for para
http://example.org/description/cat,
o tipo de retorno será text / html?
- Por que posso usar um navegador da web para visitar sites que não existiam quando o navegador foi lançado? Como o cliente pode saber sobre esses sites?
Podem parecer perguntas insanas, mas se você souber a resposta, poderá começar a ver o que é o REST. Veja StackOverflow para obter mais benefícios do REST. Quando olho para uma pergunta, posso marcar essa página como favorita ou enviar o URL para um amigo e ele pode ver as mesmas informações. Ele não precisa navegar pelo site para encontrar essa pergunta.
O StackOverflow usa uma variedade de serviços OpenId para autenticação, gravatar.com para imagens de avatar, google-analytics e Quantserve para informações analíticas. Esse tipo de integração entre empresas é o tipo de coisa com a qual o mundo SOAP apenas sonha . Um dos melhores exemplos é o fato de as bibliotecas jQuery usadas para direcionar a interface do usuário do StackOverflow serem recuperadas da rede de entrega de conteúdo do Google. O fato de a SO poder direcionar o cliente (ou seja, seu navegador da web) a baixar o código de um site de terceiros para melhorar o desempenho é uma prova do baixo acoplamento entre o cliente da web e o servidor.
Estes são exemplos de uma arquitetura REST em ação.
Agora, alguns sites / aplicativos violam as regras do REST e o navegador não funciona conforme o esperado.
- O famoso problema do botão Voltar
é causado pelo uso do estado da sessão no servidor.
- O balanceamento de carga pode se tornar um problema quando você tem o estado da sessão no servidor.
- Os aplicativos Flash geralmente impedem que o URL identifique especificamente uma representação.
- O outro problema que interrompe os navegadores da web é a baixa conformidade com os padrões de tipo de mídia. Ouvimos o tempo todo sobre como o IE6 precisa ser morto. O problema é que os padrões não foram seguidos adequadamente ou foram ignorados por qualquer motivo.
- O uso de sessões de login é a fonte de muitas falhas de segurança.
O REST está em todo lugar. É a parte da web que a faz funcionar bem. Se você deseja criar aplicativos distribuídos que podem ser dimensionados como a Web, seja resistente a alterações como a Web e promova a reutilização conforme a Web, siga as mesmas regras que eles criaram ao criar navegadores da Web.