Вернуть 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.