WebSocket vs Rest: qual a diferença?

Sockets são um paradigma para o tratamento de dados na rede e o conceito já existe há décadas. Basicamente uma forma de padronizar a entrada e saída de dados, bem como uma API (Application Programming Interface) faz para o software, de modo que independente das particularidades de cada hardware ambos poderiam “conversar”.

Então basicamente o socket é um porta através da qual os dados entram e saem. Muito parecido com um porto comercial para dados, o socket seria o cais onde as trocas estariam acontecendo do ponto de vista da aplicação. Operando em um nível baixo e abstrato muitos navios diferentes, trens e equipamentos podem usá-lo. Podemos chamar todos estes de protocolos.

Na internet existem diversos protocolos, alguns mais comuns como HTTP, FTP, SMTP, POP3, etc. e alguns de nível mais baixo como TCP e UDP. Em essência cada protocolo determina como interpretar os dados que serão trafegados.

O que é WebSocket?

Websocket é uma estensão do conceito socket. O protocolo HTTP tido como o “pai” da internet tem sido usado desde sempre na internet e funciona de um modo particular. Sempre que você acessa um site seu navegador faz um “pedido” para o servidor que “responde” com o conteúdo que seu navegador irá renderizar. A cada pedido é aberta uma porta que em seguida é fechada.

Isso passou a ser um limitador para muitas aplicações web e mais recentemente mobile pois esse processo de abertura e fechamento impossibilitam respostas rápidas ou até em tempo real. Então criar dashboards para exibição de dados em tempo real ou qualquer outra aplicação que demanda um alto fluxo de informações se torna muito custoso tanto para o cliente como para o servidor.

Felizmente em 2011 o WebSocket foi padronizado permitindo que o servidor faça o envio de informações para o cliente (seu navegador ou app) e vice-versa em tem tempo real trazendo uma infinidade de benefícios para ambos.

O que é REST?

REST (Representional State Transfer) é outra abstração para a criação de APIs para aplicações padronizadas. Atualmente é praticamente um padrão de arquiterua para aplicações web o uso de REST usando HTTP. Não importa se a aplicação é desenvolvida em Ruby, Java, Go, NodeJS ou qualquer uma disponível, fundamentalmente funcionam da mesma maneira recebendo pedidos de informação e entregando o pedido.

REST organiza todos os pedidos de maneiras previsíveis usanto tipo de operações, ou verbos onde os mais comuns são GET, POST, PUT, DELETE e vários outros mas apesar de atualmente ser de longe a forma mais utilizada na contrução de APIs ainda funciona sobre o protocolo HTTP e suas limitações.

Imagine que você acessou um site de notícias, clicou em uma notícia e começou a ler. Neste caso a solução REST / HTTP funciona bem pois não é necessário que o servidor envie mais informações para o cliente tendo em vista que o mesmo ainda está lendo a notícia e somente quando desejar ele irá fazer um novo pedido para o servidor lhe entregar mais notícias.

Comparação de desempenho

Metaforicamente vamos pensar numa solução como um exército e sua cadeia de comando onde o servidor é o General e os aplicativos Soldados. Usando REST / HTTP cada soldado teria que perguntar ao General se existe novas encomendas, isso iria onerar tremendamente General especialmente quando não há nada de novo. Portanto se seu exército opera em REST / HTTP saiba que você está desperdiçando muitos recursos.

Usando a mesma metáfora. Usando WebSocket e como que cada Soldado tivesse um rádio e quando o General desse uma ordem todos os soldados a receberiam simultaneamente, claro, o rádio possui faixas diferentes sendo assim o General poderia dar ordens específicas para certos grupos de Soldados ou até falar com apenas um em particular.

Tem um artigo muito bom descrevendo e detalhando as diferenças entre REST / HTTP e WebSocket aqui.

Conclusão

Andei criando muita coisa com WebSocket, laboratório mesmo, mas em produção coloquei apenas funcionalidades pouco críticas e em apenas alguns aplicativos. Agora sinto que chegou a hora de avançar e decidi criar um novo modelo de arquitetura para isso, estou pesquisando muita coisa de streaming e P2P onde o WebSocket já é bastante utilizado para obter referências mas ainda não vi muita coisa sobre a comunicação entre APPs usando WebSocket além de chat.

Agora o objetivo é desenvolver um aplicativo que funcione 100% via WebSocket. Creio que será perfeito para IoT


Originally published at www.danielbertini.com.