Http-ответ 303 подразумевает, что клиент должен перенаправить? - PullRequest
0 голосов
/ 12 ноября 2018

Я реализую API, пытаясь придерживаться Restful дизайна. У нас есть сценарий использования для принятия запроса POST, создания ресурса и возврата URL-адреса клиенту. Клиент захочет применить некоторую бизнес-логику, которая определяет, должен ли ресурс извлекаться из этого URL или нет. Мне кажется естественным, что код возврата должен быть 303, как указано в RFC 7231:

Пользовательский агент может выполнить запрос поиска, направленный на этот URI (запрос GET или HEAD, если используется HTTP), который также может быть перенаправлен, и представить конечный результат в качестве ответа на исходный запрос

Однако коллега не согласен и предлагает ответ 200, так как от клиента не требуется следовать перенаправлению, чтобы получить ресурс - это его дело. RFC заявляет

Если предусмотрено поле заголовка Location (раздел 7.1.2), Пользовательский агент МОЖЕТ автоматически перенаправить свой запрос на URI на которое ссылается значение поля Location, даже если конкретный статус Код не понят. Автоматическое перенаправление должно быть сделано с заботиться о методах, которые, как известно, не безопасны, как определено в разделе 4.2.1, поскольку пользователь может не захотеть перенаправить небезопасный запрос

Я прочитал это, чтобы сказать, что ответ на перенаправление оставляет решение о том, перенаправлять или нет, клиенту. Мой коллега утверждает, что, поскольку браузеры и клиенты автоматически перенаправляют, нам не следует указывать им это делать. Это правильно?

1 Ответ

0 голосов
/ 12 ноября 2018

Обычные соглашения для API REST - не перенаправлять после POST, для API не требуется шаблон PRG .

Код состояния HTTP должен отражать то, что было сделано(200,201,202 и т. Д.) Вместо кода состояния перенаправления, так как это намного удобнее для пользователей API.

Браузеры действительно следуют перенаправлениям , поэтому, выполнив перенаправление, выусложняет использование вашего API из браузеров - они не могут отказаться от перенаправления.

...