Sto progettando un'API REST per un sistema a tre livelli come: Client application-> Front-end API cloud server-> user's home API server (Home).
Homeè un dispositivo domestico e dovrebbe mantenere la connessione Front-endtramite Websocket o un lungo sondaggio (questo è il primo posto in cui stiamo violando REST. In seguito peggiorerà ancora) . Front-endper lo più tunnel Clientrichieste di Homeconnessione e gestisce alcune delle chiamate stesse. A volte Homeinvia notifiche a Client.
Front-ende Homehanno sostanzialmente la stessa API; Clientpotrebbe connettersi Homedirettamente, tramite LAN. In questo caso, è Homenecessario registrare alcune Clientazioni su Front-endse stesso.
I pro per REST in questo sistema sono:
- REST è leggibile dall'uomo;
- REST ha una mappatura ben definita di verbi (come CRUD), nomi e codici di risposta agli oggetti del protocollo;
- Funziona su HTTP e passa tutti i possibili proxy;
I contrasti REST sono:
- Abbiamo bisogno non solo di uno stile di comunicazione richiesta-risposta, ma anche di un abbonamento di pubblicazione;
- I codici di errore HTTP potrebbero non essere sufficienti per gestire gli errori di comunicazione a tre livelli;
Front-endpotrebbe tornare202 Acceptedad alcune chiamate asincrone solo per scoprire che laHomeconnessione necessaria è stata interrotta e che avrebbe dovuto esserci503; Homedeve inviare messaggi aClient.Clientdovrà effettuare il pollingFront-endo mantenere una connessione.
Stiamo prendendo in considerazione WAMP / Autobahn su Websocket per ottenere la funzionalità di pubblicazione / sottoscrizione, quando mi è sembrato che sembri già una coda di messaggi.
Vale la pena valutare una sorta di coda di messaggistica come trasporto?
Sembra che i contras della coda dei messaggi siano:
- Dovrò definire personalmente i verbi CRUD e i codici di errore a livello di messaggio.
- Ho letto qualcosa su "costi di manutenzione più elevati", ma cosa significa?
quanto sono serie queste considerazioni?
@Jimmy Hoffapunto valido, grazie. Esatto, ma non completamente. È un database comune, archiviazione e così via. @Javiergrazie, è una buona parte di una risposta.
@Mike BrownEsattamente. Per favore fallo.