Какой код состояния HTTP следует использовать для ответа REST, который содержит только часть ответа? - PullRequest
1 голос
/ 15 марта 2020

Скажем, я создаю API, который обслуживает содержимое старых журналов. Клиент может запросить содержимое последней редакции до указанной даты, например:

GET /magazines/<some_magazine_id>?date=2015-03-15

Ответ включает в себя общие данные о журнале, такие как его название, страна распространения, дата создания. ... и если в моей базе данных есть содержимое, доступное для издания до указанной даты, оно также возвращает его.

Какой код состояния HTTP следует использовать, если клиент запрашивает данные за какую-либо дату, прежде чем что-либо есть в наличии? У меня могут быть данные в будущем, когда я расширю содержание своей базы данных. Так что это своего рода временный сбой, но неясно, сколько времени может пройти, прежде чем оно будет исправлено.

На основе на другие вопросы Я чувствую, что:

  • 404 не правильно: в некоторых случаях у меня нет никаких данных о журнале, , в этом случае я бы вернул 404 Но это другое. Я хотел бы, чтобы пользователь получил частичные данные, но с указанием, что они являются только частичными.
  • 4xx - ошибки на стороне клиента. Я чувствую, что клиент не сделал ничего плохого.
  • 206 Частичное содержимое отображается при возврате диапазона содержимого, но не всего.
  • 30x Я подумал об использовании 302 или аналогичного, и указал на ближайшее доступное издание, но опять же, я не уверен, что это правильно, потому что сейчас я указываю на что-то семантически отличное от задаваемого вопроса.
  • 5xx будут ошибками, и я думаю, что они не должны содержать никаких данных.

Моим лучшим предположением будет что-то вроде 2xx No Details Available (Yet), указывающее, что запрос был "несколько успешным", но Я не могу найти ничего, что кажется правильным в списке .

1 Ответ

1 голос
/ 15 марта 2020

Я бы go с 200 ОК. Вы нашли журнал и возвращаете данные о нем. Хотя ваши данные не так полны, как могли бы быть, это полный ответ, который можно понять. Предположительно, вы возвращаете пустой массив или нулевую ссылку, где были бы редакции?

Проблема со многими из более специфичных c ответов заключается в том, что они действительно предназначены для чего-то более низкого уровень. Вы не возвращаете частичный контент, вы возвращаете полный контент. Просто данные приложений более высокого уровня не так полны, как вы могли бы пожелать (не найдено ни одной старой версии). На уровне REST / HTTP ответ просто отлично.

...