REST o una coda di messaggi in un sistema eterogeneo a più livelli?

9

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 a Front-end tramite Websocket o un lungo sondaggio (questo è il primo posto in cui stiamo violando REST. . Front-end principalmente tunnels Client richieste a Home connessione e gestisce alcune delle chiamate stesse. A volte Home invia notifiche a Client .

Front-end e Home hanno fondamentalmente la stessa API; Client potrebbe collegarsi a Home direttamente, tramite LAN. In questo caso, Home deve registrare alcune azioni Client su una Front-end stessa.

I vantaggi di REST in questo sistema sono:

  • REST è leggibile dall'uomo;
  • REST ha una mappatura dei verbi ben definita (come CRUD), nomi e codici di risposta agli oggetti del protocollo;
  • Funziona su HTTP e passa tutti i possibili proxy;

I contras REST sono:

  • Abbiamo bisogno non solo di uno stile di comunicazione richiesta-risposta, ma anche di una pubblicazione-sottoscrizione;
  • I codici di errore HTTP potrebbero non essere sufficienti per gestire errori di comunicazione a tre livelli; Front-end potrebbe restituire 202 Accepted a qualche chiamata asincrona solo per scoprire che la connessione Home necessaria è interrotta e ci dovrebbe essere 503 ;
  • Home deve inviare messaggi a Client . Client dovrà interrogare Front-end o mantenere una connessione.

Stiamo considerando WAMP / Autobahn su Websocket per ottenere funzionalità di pubblicazione / sottoscrizione, quando mi ha colpito che sembra già una coda di messaggi.

Vale la pena valutare una sorta di coda di messaggi 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?

    
posta Victor Sergienko 15.10.2013 - 15:06
fonte

2 risposte

5

Se hai la connettività, vai con una coda di messaggi - anche se devi definire i tuoi protocolli (difficilmente un compito difficile!) per inviare messaggi di una particolare struttura e formato.

Il problema con la manutenzione è che in genere il client e il server sono costruiti separatamente, quindi devi stare attento a mantenere entrambe le estremità usando le stesse definizioni dei messaggi, ma se non sei abbastanza organizzato, usa lo stesso XML che useresti nel tuo servizio REST.

Se hai problemi di connettività su Internet, con le porte 80 e http e le comunicazioni "unidirezionali", un sistema di stile REST è probabilmente il migliore. Invia e esegui il polling o ottieni un websocket che esegue i dati di callback, ma generalmente il tuo sistema di architettura deve essere client / server. Se hai la possibilità di ottenere la connettività, allora i sistemi di messaggistica sono grandiosi.

Vado con ZeroMQ per un sistema di messaggistica, è abbastanza configurabile da girare in tutti i tipi di scenari, compresi quelli con tolleranza d'errore. Non sono sicuro che sia funziona su http però.

    
risposta data 15.10.2013 - 16:47
fonte
5

Sembra che l'Autobahn si adatti bene a ciò che stai cercando di fare. Ci sono anche altri strumenti disponibili. Controlla Bus di servizio di Windows Azure (che ha framework client per Java, .NET , PHP, Python, NodeJS e Ruby).

Sebbene i messaggi di riposo integrati siano utili. Scoprirai che la tua applicazione supererà le operazioni CRUD di base. Ad esempio se la tua domanda era un sistema bancario. Invece di

Aggiornamento Acct 54321 Saldo = Saldo - 20.00 Aggiornamento Acct 98765 Saldo = Saldo + 20,00

Probabilmente vorrai un singolo messaggio come

Trasferisci 20.00 dall'account 54321 all'account 98765

È meglio scoprire questo ostacolo con REST ora piuttosto che dopo. Dai un'occhiata a Centro eventi di Greg Young in cui viene spiegato come creare un modello più ricco per la messaggistica all'interno della tua applicazione.

    
risposta data 15.10.2013 - 17:49
fonte

Leggi altre domande sui tag