Di solito restituirei il numero di record come risultato in metadati. Non sono sicuro che si tratti della normale pratica REST, ma non contiene molti dati extra ed è molto preciso. Di solito c'è impaginazione per molti servizi, non è pratico restituire enormi set di risultati contemporaneamente. Personalmente sono infastidito quando c'è impaginazione per piccoli insiemi di risultati .. Se è vuoto, torna number_of_records : 0
e prenota come lista / matrice vuota books : []
.
{
meta: {
number_of_records : 2,
records_per_page : 10,
page : 0
},
books : [
{id:1},
{id:27}
]
}
EDIT (pochi anni dopo): la risposta di Martin Wickman è molto meglio, qui è "breve" di spiegazione del perché.
Quando si affronta l'impaginazione, tenere sempre presente la possibilità di contenuti o di cambiare l'ordine. Ad esempio, arriva la prima richiesta, 24 risultati, si restituisce il primo 10. Successivamente, viene inserito "nuovo libro" e ora si ottengono 25 risultati, ma con la richiesta originale verrebbe ordinato al 10 ° posto. Quando il primo utente richiede la seconda pagina, non riceverà "nuovo libro". Esistono modi per gestire tali problemi, come fornire "ID richiesta" che deve essere inviato con le seguenti chiamate API, quindi restituire la pagina successiva dal set di risultati "vecchio", che dovrebbe essere archiviato in qualche modo e legato a "ID richiesta". In alternativa è possibile aggiungere un campo come "Elenco risultati modificato dalla prima richiesta".
In generale, se puoi, prova a fare uno sforzo extra ed evitare l'impaginazione. L'impaginazione è uno stato aggiuntivo che può essere mutato e il monitoraggio di tali modifiche è soggetto a errori, ancor più perché sia il server che il client devono gestirlo.
Se hai troppi dati da elaborare contemporaneamente , prendi in considerazione la possibilità di restituire "elenco ID" con tutti i risultati e i dettagli per alcuni pezzi di tale elenco e fornire chiamate API multi_get / get_by_id_list per la risorsa.