Для вашого конкретного прикладу я рекомендую / v1 / get / books повертати HTTP 200 з порожнім масивом.
Якщо я читаю правильно вашу публікацію, ваш API має намір збирати книги. Метафорично кажучи, у вас є полиця для книг, стелаж для DVD для фільмів та, можливо, інші контейнери, про які ви тут не згадували. Оскільки ви збираєтесь збирати книги, / v1 / get / books - це ваша книжкова полиця. Це означає, що у вашому конкретному прикладі є дійсний ресурс - список книг - який, як правило, порожній.
Причина, в якій я не пропоную повернути HTTP 404, полягає в тому, що полиця все ще є. Наразі книг на ній немає, але це все-таки книжкова полиця. Якщо б це було не книжкова полиця -якщо API не мають наміру збирати книги для приклад- тоді HTTP 404 буде доречно. Але оскільки там є ресурс, ви не повинні сигналізувати про відсутність такого, що це робить HTTP 404. Тому я стверджую, що 200 з порожнім масивом (що означає колекцію) є більш підходящим.
Причина, по якій я не пропоную повернути HTTP 204, полягає в тому, що це підказує, що "Без вмісту" є звичайним станом речей: виконання цієї дії на цьому ресурсі зазвичай нічого не призведе. Ось чому зазвичай використовується як відповідь на DELETE-запити, наприклад: природа видалення загалом означає, що повернути нічого не залишається. Випадок подібний, коли він використовується для відповіді на запити із заголовками родини If-Modified: ви хотіли вмісту лише у тому випадку, якщо ресурс змінився, але його немає, тому я не дам вам жодного вмісту.
Але я стверджую, що для отримання порожньої, але дійсної колекції, HTTP 204 не має сенсу. Якщо в колекції були елементи, то правильне представлення було б масивом цих даних. Тому, коли даних там немає (але колекція є дійсною), правильне представлення - це порожній масив.