Troppe chiamate API REST su una pagina?

8

Un'app Web progettata con componenti piccoli e altamente modulari (in questo caso utilizzando le direttive AngularJS ma potrebbe essere altrettanto facilmente WebComponents, componenti ReactJS o qualsiasi altra tecnologia). I componenti hanno spesso chiamate API REST asincrone, al momento dell'inizializzazione o dell'interazione dell'utente. Questo design sta causando molte chiamate API per pagina (a volte più di 20). C'è qualche problema con questo design? Alcuni suggeriscono di condensare le chiamate API in servizi più grandi lato client che fungono da singletons. Quindi 10 chiamate API possono essere ridotte a 1, anche se una pagina può utilizzare solo una parte di tali dati. Ci sono delle bandiere rosse o problemi con questo design? Quale dovrebbe essere preferito?

    
posta Ryan Langton 15.09.2015 - 15:43
fonte

4 risposte

3

I browser limitano il numero totale di richieste simultanee

link

Quindi sì, c'è un problema con questo design. Tuttavia, ritengo che la risposta accettata sia quella di passare a un'implementazione di socket Web in cui si utilizza una singola connessione, ma con molti tipi di messaggi per comunicare con il server

    
risposta data 15.09.2015 - 16:36
fonte
1

This design is causing many API calls per page (sometimes 20+). Is there any problem with this design?

Non dovrebbe esserci. Il fatto che ogni richiesta sia piccola e asincrona significa che puoi velocizzare notevolmente la tua app web, piuttosto che dover aspettare una singola grande richiesta per completare i blocchi di tutto.

Assicurati che il tuo javascript sia appropriatamente corretto e possa fare le cose mentre le tue altre richieste sono in attesa e ti ritroverai con un'app molto migliore che se avessi una richiesta massiccia che recupera tutto.

Dopo che tutti i browser sono progettati per gestire il caricamento di molti URL in tandem, anche una tipica pagina Web standard può avere decine se non centinaia di richieste di immagini, css, javascript, iframes ecc.

    
risposta data 18.09.2015 - 17:55
fonte
0

Non dimenticare la dimensione di ogni richiesta di rete. In genere, se ogni richiesta restituisce solo 2 KB di dati, la richiesta di rete è troppo costosa per quella piccola quantità di dati.

Se la richiesta di rete arriva a 400 KB, interrompila in due. Ma generalmente, i dati non sufficienti per una singola richiesta di rete sono più spesso il problema.

    
risposta data 31.10.2018 - 15:11
fonte
0

Alcune considerazioni qui:

Prestazioni

Se vedi prestazioni accettabili, non dovresti preoccuparti troppo di questo. Se riesci a eseguire HTTP2 dovresti vedere un aumento delle prestazioni. [1] .

design

Come in qualsiasi progetto, non ci sono regole rigide per decidere se si debbano eseguire molte piccole richieste o poche richieste di grandi dimensioni. Alcune cose da considerare:

  1. Molte chiamate sono interdipendenti? Se si dispone di una relazione di dipendenza complessa tra chiamate diverse, è possibile rendere più difficile la manutenzione. Se questo è il caso, i dati di risposta relativi al batch avrebbero senso.

  2. I diversi componenti condividono gran parte degli stessi dati? In questo caso potresti avere un punto centrale che effettua le chiamate condivise e consente ai componenti di accedere ai dati condivisi.

  3. Tieni d'occhio il carico di manutenzione dei piccoli componenti che effettuano chiamate separate. Saprai quando diventa difficile da gestire e quindi potrebbe essere necessario un cambiamento. Cambiare un design basato su ipotetiche esigenze future può causare errori di progettazione, perché devi anticipare con precisione quali problemi avrai in futuro. Se funziona bene ora, anche cambiarlo non sarebbe necessario.

1: "HTTP / 2 è completamente multiplato consentendo di trasferire contemporaneamente più file e richieste, al contrario di HTTP1.x che accetta solo una singola richiesta / connessione alla volta. HTTP / 2 utilizza la stessa connessione per trasferire diversi file e richieste, evitando la pesante operazione di apertura di una nuova connessione per ogni file che deve essere trasferito tra un client e un server. "- link

    
risposta data 31.10.2018 - 15:52
fonte

Leggi altre domande sui tag