Di solito restituirei il numero di record nel risultato come metadati. Non sono sicuro che si tratti di una normale pratica di REST, ma non sono molti dati extra, ed è molto precisa.
Di solito c'è una paginazione per molti servizi, non è pratico restituire enormi risultati contemporaneamente. Personalmente sono seccato quando c'è impaginazione per piccoli set di risultati ..
Se è vuoto, restituisce number_of_records : 0
e libri come elenco vuoto / matrice 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 migliore, ecco "breve" spiegazione del perché.
Quando si ha a che fare con l'impaginazione, tenere sempre presente la possibilità che il contenuto o l'ordine cambino. Come, la prima richiesta arriva, 24 risultati, si ritorna prima 10. Dopo di ciò, viene inserito "nuovo libro" e ora si hanno 25 risultati, ma con la richiesta originale verrebbe ordinato al 10 ° posto. Quando il primo utente richiede la seconda pagina, non otterrebbe il "nuovo libro". Ci sono modi per gestire tali problemi, come fornire "ID richiesta" che dovrebbe essere inviato con le seguenti chiamate API, quindi restituire la prossima pagina dal "vecchio" set di risultati, che dovrebbe essere memorizzato in qualche modo e legato a "ID richiesta". Alternativa è aggiungere campi come "lista dei risultati modificata dalla prima richiesta".
Generalmente, se puoi, cerca di fare uno sforzo extra ed evitare l'impaginazione. La paginazione è uno stato aggiuntivo che può essere mutato e il monitoraggio di tali modifiche è soggetto a errori, anche perché sia il server che il client devono gestirlo.
Se hai troppi dati da elaborare in una sola volta , considera la possibilità di restituire "id list" con tutti i risultati e i dettagli per alcune porzioni di quell'elenco e fornire chiamate API multi_get / get_by_id_list per la risorsa.