Normalmente, eu retornaria o número de registros no resultado como metadados. Não tenho certeza se isso é uma prática REST normal, mas não é muito mais dados, e é muito preciso.
Geralmente há paginação para muitos serviços, é impraticável retornar um conjunto de resultados enorme de uma só vez. Pessoalmente estou irritado quando há paginação para pequenos conjuntos de resultados.
Se estiver vazio, retorne number_of_records : 0
e livros como lista vazia / array books : []
.
{
meta: {
number_of_records : 2,
records_per_page : 10,
page : 0
},
books : [
{id:1},
{id:27}
]
}
EDIT (alguns anos depois): Resposta de Martin Wickman é muito melhor, aqui é "curto" de explicação porque.
Ao lidar com a paginação, tenha sempre em mente a possibilidade de conteúdos ou pedidos de alteração. Como, primeiro pedido vem, 24 resultados, você retorna primeiro 10. Depois disso, "novo livro" é inserido e agora você tem 25 resultados, mas com o pedido original, seria ordenado em 10º lugar. Quando o primeiro usuário solicita a segunda página, ele não recebe "novo livro". Existem maneiras de lidar com tais problemas, como fornecer "id de solicitação", que deve ser enviado com as seguintes chamadas de API, retornando a próxima página do conjunto de resultados "antigo", que deve ser armazenado de alguma forma e vinculado a "id de solicitação". Alternativa é adicionar campo como "lista de resultados alterada desde a primeira solicitação".
Geralmente, se você puder, tente colocar um esforço extra e evitar a paginação. A paginação é um estado adicional que pode sofrer mutação e rastrear essas alterações é propenso a erros, ainda mais porque tanto o servidor quanto o cliente precisam lidar com isso.
Se você tiver muitos dados para processar de uma só vez , considere retornar "id list" com todos os resultados e detalhes de algum trecho dessa lista e fornecer chamadas de API multi_get / get_by_id_list para recursos. / p>