Thông thường tôi sẽ trả về số lượng hồ sơ trong kết quả là siêu dữ liệu. Tôi không chắc đó có phải là thực hành REST bình thường không, nhưng nó không có nhiều dữ liệu bổ sung, và nó rất chính xác. Thông thường có phân trang cho rất nhiều dịch vụ, việc trả lại kết quả khổng lồ cùng một lúc là không thực tế. Cá nhân tôi cảm thấy khó chịu khi có phân trang cho các tập kết quả nhỏ .. Nếu nó trống, trả về number_of_records : 0
và sách dưới dạng danh sách / mảng trống books : []
.
{
meta: {
number_of_records : 2,
records_per_page : 10,
page : 0
},
books : [
{id:1},
{id:27}
]
}
EDIT (vài năm sau): Câu trả lời từ Martin Wickman tốt hơn nhiều, đây là "ngắn gọn" giải thích tại sao.
Khi xử lý phân trang luôn ghi nhớ khả năng nội dung hoặc thay đổi thứ tự. Giống như, yêu cầu đầu tiên đến, 24 kết quả, bạn trả lại đầu tiên 10. Sau đó, "cuốn sách mới" được chèn và bây giờ bạn có 25 kết quả, nhưng với yêu cầu ban đầu, nó sẽ được đặt ở vị trí thứ 10. Khi người dùng đầu tiên yêu cầu trang thứ 2, anh ta sẽ không nhận được "cuốn sách mới". Có nhiều cách để xử lý các vấn đề như vậy, như cung cấp "id yêu cầu" cần được gửi bằng các lệnh gọi API sau, sau đó trả lại trang tiếp theo từ tập kết quả "cũ", được lưu trữ bằng cách nào đó và được gắn với "id yêu cầu". Thay thế là thêm trường như "danh sách kết quả đã thay đổi kể từ yêu cầu đầu tiên".
Nói chung, nếu bạn có thể, hãy cố gắng nỗ lực thêm và tránh phân trang. Phân trang là trạng thái bổ sung có thể bị thay đổi và theo dõi các thay đổi như vậy dễ bị lỗi, thậm chí còn nhiều hơn vì cả máy chủ và máy khách đều cần xử lý.
Nếu bạn có quá nhiều dữ liệu để xử lý cùng một lúc , hãy xem xét trả lại "danh sách id" với tất cả các kết quả và chi tiết cho một số phần của danh sách đó và cung cấp các lệnh gọi API multi_get / get_by_id_list cho tài nguyên.