Estou projetando uma API REST para um sistema de três camadas, como: Client application
-> Front-end API cloud server
-> user's home API server (Home)
.
Home
é um dispositivo doméstico e deve manter a conexão Front-end
via Websocket ou uma pesquisa longa (este é o primeiro lugar em que estamos violando o REST. Fica ainda pior depois) . Front-end
encapsula principalmente Client
solicitações de Home
conexão e lida com algumas das chamadas em si. Às vezes Home
envia notificações para Client
.
Front-end
e Home
tem basicamente a mesma API; Client
pode estar se conectando Home
diretamente, pela LAN. Nesse caso, Home
precisa registrar algumas Client
ações em um Front-end
si mesmo.
Os profissionais do REST neste sistema são:
- O REST é legível por humanos;
- O REST possui um mapeamento bem definido de verbos (como CRUD), substantivos e códigos de resposta para objetos de protocolo;
- Funciona sobre HTTP e passa todos os proxies possíveis;
Contras REST são:
- Precisamos não apenas de um estilo de comunicação de solicitação-resposta, mas também de publicação-assinatura;
- Os códigos de erro HTTP podem ser insuficientes para lidar com erros de comunicação em três camadas;
Front-end
pode retornar202 Accepted
a alguma chamada assíncrona apenas para descobrir que aHome
conexão necessária está interrompida e que deveria ter ocorrido503
; Home
precisa enviar mensagens paraClient
.Client
terá que pesquisarFront-end
ou manter uma conexão.
Estamos considerando o WAMP / Autobahn over Websocket para obter a funcionalidade de publicação / assinatura, quando me ocorreu que ele já parecia uma fila de mensagens.
Vale a pena avaliar um tipo de fila de mensagens como um transporte?
Parece que os controles da fila de mensagens são:
- Vou precisar definir verbos CRUD e códigos de erro no nível da mensagem.
- Eu li algo sobre "maior custo de manutenção", mas o que isso significa?
Quão sérias são essas considerações?
@Jimmy Hoffa
ponto válido, obrigado. Isso mesmo, mas não completamente. É um banco de dados comum, armazenamento e assim por diante. @Javier
obrigado, é uma boa parte de uma resposta.
@Mike Brown
exatamente. Por favor faça.