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-end
tramite Websocket o un lungo sondaggio (questo è il primo posto in cui stiamo violando REST. In seguito peggiorerà ancora) . Front-end
per lo più tunnel Client
richieste di Home
connessione e gestisce alcune delle chiamate stesse. A volte Home
invia notifiche a Client
.
Front-end
e Home
hanno sostanzialmente la stessa API; Client
potrebbe connettersi Home
direttamente, tramite LAN. In questo caso, è Home
necessario registrare alcune Client
azioni su Front-end
se 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-end
potrebbe tornare202 Accepted
ad alcune chiamate asincrone solo per scoprire che laHome
connessione necessaria è stata interrotta e che avrebbe dovuto esserci503
; Home
deve inviare messaggi aClient
.Client
dovrà effettuare il pollingFront-end
o 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 Hoffa
punto valido, grazie. Esatto, ma non completamente. È un database comune, archiviazione e così via. @Javier
grazie, è una buona parte di una risposta.
@Mike Brown
Esattamente. Per favore fallo.