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-endvia Websocket ou uma pesquisa longa (este é o primeiro lugar em que estamos violando o REST. Fica ainda pior depois) . Front-endencapsula principalmente Clientsolicitações de Homeconexão e lida com algumas das chamadas em si. Às vezes Homeenvia notificações para Client.
Front-ende Hometem basicamente a mesma API; Clientpode estar se conectando Homediretamente, pela LAN. Nesse caso, Homeprecisa registrar algumas Clientações em um Front-endsi 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-endpode retornar202 Accepteda alguma chamada assíncrona apenas para descobrir que aHomeconexão necessária está interrompida e que deveria ter ocorrido503; Homeprecisa enviar mensagens paraClient.Clientterá que pesquisarFront-endou 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 Hoffaponto válido, obrigado. Isso mesmo, mas não completamente. É um banco de dados comum, armazenamento e assim por diante. @Javierobrigado, é uma boa parte de uma resposta.
@Mike Brownexatamente. Por favor faça.