Questo problema si è verificato durante la progettazione dell'API per un'applicazione Web SPA, che comunica con il server tramite AJAX.
In una pagina l'utente, che sta creando un elenco di persone da invitare a un evento, ha la possibilità di aggiungere persone che sono state invitate a eventi precedenti. Immagina un menu a discesa contenente i nomi degli eventi precedenti. Quando viene selezionato un evento, un multiselect viene compilato con tutti gli invitati a quell'evento precedente. L'utente può selezionare da queste persone e premere "Aggiungi", che le aggiunge all'elenco di invitati per l'evento corrente.
Se immagini la struttura dei dati dietro il menu a discesa / multiselect descritto, potrebbe essere qualcosa del genere:
previousEventGuests [
{
eventName: 'Company Christmas Dinner',
guests: ['Joe Smith', 'Andy Jones', ...]
},
...
]
La domanda sorge spontanea: come vengono scaricate queste informazioni dall'API?
Vedo due approcci di alto livello:
-
Scrivi uno specifico endpoint dell'API per rispondere a questa specifica esigenza:
/previousEventsAttendees
che restituisce esattamente i dati sopra.
-
Effettua chiamate multiple a endpoint di risorse generiche
/events (foreach event_id returned, call....) /event/:event_id (to get each event's name) /event/:event_id/guests (forach list of user_ids returned, call...) /user/:id (to actually get each users name)
I pro di 1. sono che devi solo effettuare una singola chiamata AJAX e che hai un codice di elaborazione dati molto inferiore sul client. Il principale problema che vedo è che hai creato un endpoint strettamente connesso a questa particolare visualizzazione all'interno di questa particolare applicazione.
I pro di 2. sono che non stiamo utilizzando nient'altro che endpoint di risorse generiche, che potrebbero essere riutilizzati da molte viste e applicazioni differenti. I contro sono che dobbiamo fare molte chiamate AJAX e mettere insieme tutte le risposte per ottenere il formato che vogliamo.
Le mie domande sono: 1. Quali fattori dovrei prendere in considerazione quando si prendono questi tipi di decisioni? Il fatto che questa API sia un'API aziendale interna (e quasi certo che rimanga tale), piuttosto che uno pubblico, influenza la mia decisione? C'è un modo per ottenere il meglio da entrambi i mondi? 2. So che questo è un problema generale connesso ai principi di REST e con molte soluzioni (credo che Falcor sia un approccio più recente alla risoluzione di almeno un problema simile). Dovrei guardare ad altri approcci?