Normalmente, eu retornaria o número de registros no resultado como metadados. Não tenho certeza se isso é prática REST normal, mas não há muitos dados extras e é muito preciso. Geralmente, há paginação para muitos serviços; é impraticável retornar um grande conjunto de resultados de uma só vez. Pessoalmente, fico chateado quando há paginação para pequenos conjuntos de resultados. Se estiver vazio, retorne number_of_records : 0
e registre como lista / matriz vazia books : []
.
{
meta: {
number_of_records : 2,
records_per_page : 10,
page : 0
},
books : [
{id:1},
{id:27}
]
}
EDIT (alguns anos depois): A resposta de Martin Wickman é muito melhor, aqui está "breve" a explicação do porquê.
Ao lidar com paginação, lembre-se sempre da possibilidade de conteúdo ou alteração de ordem. Como, a primeira solicitação chega, 24 resultados, você retorna primeiro 10. Depois disso, "novo livro" é inserido e agora você tem 25 resultados, mas com a solicitação original, ela seria solicitada em 10º lugar. Quando o primeiro usuário solicita a segunda página, ele não recebe "novo livro". Existem maneiras de lidar com esses problemas, como fornecer "ID da solicitação", que deve ser enviado com as seguintes chamadas da API e retornar a página seguinte do conjunto de resultados "antigo", que deve ser armazenado de alguma forma e vinculado à "ID da solicitação". Alternativa é adicionar um campo como "lista de resultados alterada desde a primeira solicitação".
Geralmente, se você puder, tente fazer um esforço extra e evitar a paginação. A paginação é um estado adicional que pode ser modificado e o rastreamento dessas alterações é suscetível a erros, ainda mais porque o servidor e o cliente precisam lidar com isso.
Se você tiver muitos dados para processar de uma só vez , considere retornar a "lista de identificação" com todos os resultados e detalhes para alguns trechos dessa lista e forneça chamadas de API multi_get / get_by_id_list para obter recursos.