Sviluppo del sistema di gestione dei dispositivi mobili

1

Sto cercando di creare un sistema di gestione dei dispositivi per gli aggiornamenti over-the-air. Il sistema ha fondamentalmente 3 parti:

  1. Dispositivi client mobili con Android situati in luoghi diversi
  2. REST backend scritto in Java utilizzando Jersey Framework in esecuzione su Google App Engine.
  3. Web front end in esecuzione sul browser degli utenti.

Il caso d'uso / flusso è:

  1. Ogni client mobile ha alcune informazioni su se stesso, incluso un ID dispositivo univoco. Il client è inoltre programmato con credenziali per consentire l'accesso all'API REST per creare, aggiornare se stesso.
  2. Il backend REST memorizza i dettagli dei dispositivi in un database (in questo caso google datastore)
  3. L'interfaccia web può essere utilizzata dall'utente per visualizzare i dettagli dei dispositivi ed eseguire operazioni su di esso.
  4. I dispositivi inviano heartbeat periodici al backend REST, in risposta al quale è possibile inviare comandi se sono state richieste operazioni dall'utente.

Ora il problema è che, ci sono alcuni dettagli sul dispositivo, diciamo per esempio la città, il paese in cui si trova non è disponibile con il dispositivo.

È disponibile con qualche altro servizio che ha API che accettano l'ID del dispositivo (o un elenco di ID dispositivo) e restituisce i dettagli corrispondenti ad esso. Quando l'utente desidera visualizzare l'elenco dei dispositivi:

  1. Anche questi parametri aggiuntivi come città, paese che non vengono inviati dal dispositivo devono essere mostrati.
  2. Dovrebbe anche essere in grado di filtrare / raggruppare i dispositivi ed eseguire operazioni su di essi. Ad esempio, l'utente potrebbe voler eseguire l'operazione X su tutti i dispositivi a Londra.

Quindi le mie domande sono fondamentalmente dove e come è il posto migliore per ottenere i dettagli. Inizialmente avevo pensato che fosse possibile farlo sul web client, ovvero se gli utenti volevano vedere tutto il dispositivo nella città C:

  1. Il web client effettua una chiamata API REST per ottenere tutti i dispositivi
  2. Quindi prende la lista dei deviceID dalla risposta e fa una chiamata API all'altro servizio per ottenere i dettagli aggiuntivi.
  3. Filtra la risposta (con qualche codice javascript) in cui la città è C e poi la mostra all'utente.

Tuttavia, ritengo che questo approccio non sia corretto dal momento che comporta un numero elevato di elaborazioni sul browser client. Inoltre, se il numero di dispositivi aumenta, causerà problemi.

Quindi è necessario che ci sia qualcosa tra il client Web e il backend REST che fa effettivamente chiamare le API REST e fa tutto il filtraggio e quindi fornisce il risultato al browser client? Se sì, allora dove dovrebbe sedersi e quali tipi di API / interazione dovrebbero avere con il client?

Qual è il modo migliore per gestirlo?

Modifica

Per quanto riguarda il fatto che il back-end REST recupera i dettagli dalle API esterne, può essere fatto, ma ho pensato che potrebbe non essere appropriato a causa dei seguenti motivi:

  1. In seguito potrei voler utilizzare questo sistema per una distribuzione diversa (un diverso set di dispositivi), in questo caso, le API esterne, le credenziali per accedervi e i campi di risposta cambieranno. Quindi, ho pensato che sarebbe stato meglio non avere questi set nel backend REST per tenerlo generico.

  2. Non ho lavorato molto con i servizi RESTful oi servizi web in generale, non sono chiaro come / quale sarebbe il flusso nel caso in cui il backend REST stia eseguendo il recupero:

    a. Il significato è come ogni volta che il browser client invia una richiesta esempio per ottenere tutti i dispositivi a Londra, quindi il backend REST prima ottiene tutti i dispositivi dal database, quindi chiama esterno API con l'elenco di tutti gli ID dispositivo per ottenere i dettagli, quindi filtra la risposta dove la città è Londra e poi fornisce il risposta al client web.

    b. Se questo è il caso, la chiamata API esterna dal backend REST deve essere sincrona o aysncronaus. Se è sincrono, il tempo di risposta per il client Web alla richiesta inviata sarà alto. Google App Engine credo abbia un limite di tempo di 60 secondi per le richieste HTTP.

    c. Se le chiamate a API esterne sono asincrone, cosa restituisce il backend REST al client Web quando effettua la richiesta GET.

    d. Inoltre, in questo caso, il backend REST agisce in un certo senso sia come server REST sia come client. È corretto? Intendo in tutti i tutorial / esempi che ho visto che non ho visto nessuno di questi usi?

posta Archit Sinha 21.07.2017 - 07:57
fonte

0 risposte

Leggi altre domande sui tag