Вернуть Ok с пустым списком VS. Без содержания

Я написал веб-API, который возвращает 204 (No Content), когда клиент запрашивает все элементы в коллекции, но коллекция пуста.

Например: /api/products возвращает 204, когда нет продуктов.

Теперь моя проблема в том, что я пытаюсь использовать API с помощью Restangular следующим образом:

Restangular.all('products').getList().then(function (products) {
    $scope.products = products;
});

Однако это приводит к следующей ошибке javascript.

Ошибка: ответ для getList СЛЕДУЕТ быть массивом, а не объектом или что-то еще

Что дает? Я не могу найти какую-либо информацию о том, как не обрабатывать содержимое в ретрансляционном документе

Я использую 204 неправильно? Должен ли я вместо этого вернуть 200 с пустым списком?

Ответ 1

204, по-видимому, рассматривается как "no list" или null, а не как пустой список. Я бы сказал, что это разумное поведение. Вероятно, вам понадобится либо проверить на 204, либо в специальном случае, либо изменить API, чтобы вернуть 200 OK без элементов. Я бы призвал вас сделать последнее. Я не уверен, что вы используете 204 так, как планировали.

Из RFC 2616,

Сервер выполнил запрос, но ему не нужно возвращать Тело объекта

В вашем случае серверу необходимо вернуть тело сущности, просто происходит, что объект представляет собой пустую коллекцию. Обычно 204 используется для POST или DELETE.