Estoy diseñando una API REST para un sistema de tres niveles como: Client application-> Front-end API cloud server-> user's home API server (Home).
Homees un dispositivo doméstico, y se supone que mantiene la conexión a Front-endtravés de Websocket o una encuesta larga (este es el primer lugar donde estamos violando REST. Más adelante empeora) . Front-endla mayoría de las veces hace un túnel Clientpara las solicitudes de Homeconexión y maneja algunas de las llamadas en sí. A veces Homeenvía notificaciones a Client.
Front-endy Hometiene básicamente la misma API; Clientpodría estar conectando Homedirectamente, a través de LAN. En este caso, Homenecesita registrar algunas Clientacciones en Front-endsí mismo.
Los pros para REST en este sistema son:
- REST es legible por humanos;
- REST tiene un mapeo bien definido de verbos (como CRUD), sustantivos y códigos de respuesta a objetos de protocolo;
- Funciona a través de HTTP y pasa todos los proxies posibles;
Los contras de REST son:
- No solo necesitamos un estilo de comunicación de solicitud-respuesta, sino también una publicación-suscripción;
- Los códigos de error HTTP pueden ser insuficientes para manejar errores de comunicación de tres niveles;
Front-endpodría volver202 Accepteda alguna llamada asincrónica solo para descubrir que laHomeconexión necesaria está interrumpida y debería haberla503; Homenecesita enviar mensajes aClient.Clienttendrá que sondearFront-endo mantener una conexión.
Estamos considerando WAMP / Autobahn sobre Websocket para obtener la funcionalidad de publicación / suscripción, cuando me di cuenta de que ya parecía una cola de mensajes.
¿Vale la pena evaluar una especie de cola de mensajes como transporte?
Parece que los contras de la cola de mensajes son:
- Necesitaré definir verbos CRUD y códigos de error yo mismo a nivel de mensaje.
- Leí algo sobre "mayor costo de mantenimiento", pero ¿qué significa?
¿Qué tan serias son estas consideraciones?
@Jimmy Hoffapunto válido, gracias. Eso es correcto, pero no completamente. Es una base de datos común, almacenamiento, etc. @Javiergracias, es una buena parte de una respuesta.
@Mike Brownexactamente. Por favor, hazlo.