Já faz mais de uma década desde que as pessoas começaram a falar sobre Computação Ubíqua ou Internet das Coisas (quase três décadas para a primeira), e naquela época era considerado um sonho. Atualmente é uma realidade, estamos rodeados à todo momento por diversos dispositivos habilitados para a Internet. Recentemente, muito trabalho tem sido realizado por alguns grupos de padronização (como o IETF, por exemplo) em diversos aspectos relacionados com a Internet das Coisas (IoT), incluindo o protocolo Concise Binary Object Represantation (CBOR), que visa preencher mensagens pequenas com o máximo possível de informação.
O Concise Binary Object Representation (CBOR) é um formato de dados em que os objetivos de design incluem a possibilidade de tamanho de código extremamente reduzido, tamanho de mensagem relativamente pequeno, e extensibilidade sem a necessidade de negociação de versão. Estes objetivos de design o diferenciam de protocolos mais antigos de serialização binária, como o ASN.1 e MessagePack.
Mas foi só uma questão de tempo, até que o REST fosse utilizado nesta área. O grupo de trabalho Constrained RESTful Environments (CoRE) é financiado pelo IETF para fornecer:
[...] um framework para aplicações orientadas a recursos, direcionado a execução em redes IP restritas. Uma rede IP restrita possui pacotes de tamanhos limitados, pode exibir um alto índice de perda de pacotes, e ter um número substancial de dispositivos que podem ser desligados a qualquer momento, mas que são periodicamente "acordados" por curtos intervalos de tempo.
Como parte desse framework de construção de aplicações para dispositivos restritos, o grupo de trabalho também definirá o Constrained Application Protocol (CoAP) para manipulação de recursos nestes dispositivos:
O Grupo de Trabalho definirá um mapeamento entre o CoAP e uma API HTTP REST; este mapeamento não será dependente de uma aplicação específica. Vale a pena notar que não é necessário haver proxy na fronteira entre a rede restrita e a rede geral, mas pode ser implantado em vários pontos da rede irrestrita.
O grupo já definiu uma série de requisitos que o protocolo deve atender, incluindo:
- A capacidade de criar, ler, atualizar e remover um recurso em um dispositivo;
- Suportar o envio de mensagens multicast não confiáveis a um grupo de dispositivos;
- Deve operar sobre UDP, com algum suporte opcional (e limitado) ao TCP;
- Especificação da API baseada em HTTP REST e a sua tradução entre CoAP e o HTTP para comunicação de dispositivos.
Visto que o grupo apenas iniciou seus trabalhos recentemente, ainda há uma série de indefinições, como segurança, por exemplo. Contudo, já existe um projeto que suporta CoAP em Java com jCoAP.