Il modo migliore per consumare il servizio REST all'interno di Servlet sullo stesso server?

3

Sto creando un'app Web e sto implementando un'API RESTful per esporre il server a tutti i tipi di client.

Sul client web voglio avere sia rendering server che rendering client. La maggior parte del layout sarà il rendering del server e le modifiche / aggiornamenti avverranno tramite javascript.

Per servire l'HTML dal server ho bisogno di utilizzare l'API REST, quindi stavo pensando di inserire la logica sui servlet che interagiranno con l'API REST e quindi stamperemo il risultato usando JSP.

Quello che vorrei sapere è:

  • Qual è il modo migliore per utilizzare i servizi REST nei servlet? Voglio dire che sono sullo stesso server, quindi dovrei ancora implementare un client REST sui servlet?
  • Non creerà troppe richieste http? Cliente - > Servlet - > API REST, non c'è un modo per farlo in modo più diretto?
posta out_sid3r 12.06.2015 - 21:47
fonte

3 risposte

2

Hai 2 opzioni:

  • Consumare l'API REST utilizzando le richieste AJAX . In questo caso, il tuo web client restituirà al browser una pagina "statica", che recupererà tutti i dati necessari utilizzando le richieste AJAX all'API REST. Utilizzando questo approccio, si trasporterà l'elaborazione principale sul lato client (client che indica il browser Web degli utenti finali). Per un'implementazione più semplice delle richieste AJAX e dei concetti correlati, come la convalida sul lato client e la trasformazione dei dati, è possibile sfruttare vari framework JS (come jQuery , JS angolare ecc.)

Svantaggi: il carico di elaborazione nel client anziché nel server potrebbe peggiorare le prestazioni dell'applicazione, problemi di sicurezza nel client in caso di progettazione errata

  • Consumare l'API REST utilizzando le richieste back-end . In questo caso, effettuerai il caricamento dei dati necessari utilizzando l'API REST dalle chiamate di back-end. Dopo aver caricato i dati necessari e generato dinamicamente l'intera pagina, la restituirai al browser web. In questo caso, il Javascript usato sarà minimo e usato solo per le animazioni (e non il caricamento dei dati). Ci sono varie librerie-framework che renderanno il tuo lavoro più facile per creare le chiamate API e consumare le risposte. Alcuni di questi sono client JAX-RS , Unirest , Resty

Per evitare lo schema architettonico Client - > Servlet - > API REST , puoi progettare la tua applicazione in modo tale che il servizio restituisca varie forme di risposta (JSON-REST, HTML ecc.). In questo modo, dopo aver caricato i dati, a seconda del tipo di client, è possibile scegliere il formato della risposta e utilizzare il servizio adatto.

    
risposta data 24.07.2015 - 14:42
fonte
1

Quello che vedo di solito è una semplice astrazione in cui le classi di servizio restituiscono i dati necessari in forma di oggetto e le classi di controller Rest restituiscono a JSON oa qualunque cosa si stia eseguendo il marshalling. Ciò ti consentirebbe di riutilizzare i Servizi solo per le tue esigenze lato server e non di richiamare te stesso.

    
risposta data 24.07.2015 - 16:29
fonte
0

Se chiami i tuoi servizi RESTful, sul tuo server si aprono più connessioni HTTP (e anche thread). Se non si presta attenzione e si gestisce correttamente il client HTTP, si potrebbero verificare delle connessioni. Se l'interfaccia del servizio cambia, come lo saprai? Ti ricorderai di aggiornare i tuoi servlet? Gli sviluppatori si aspetterebbero che il compilatore fornisse alcuni errori. Tutto ciò significherebbe sia un sovraccarico di prestazioni che di manutenzione.

Quello che vuoi fare è separare il contratto (invocazione e rappresentazione RESTful dalla logica del servizio vedi Pattern servizio SOA . Questo ti permette di creare molti tipi di rappresentazioni client (resto, web / jsp statico, soap, Ejb / rmi, ecc.), Riutilizzando la stessa logica.

    
risposta data 25.07.2015 - 10:41
fonte

Leggi altre domande sui tag