Каков подходящий код ответа HTTP для уже существующего файла?

Мне было интересно, какой правильный HTTP-код ошибки для кого-то, кто пытается:

PUT /newfile.txt HTTP/1.1
Host: myhost

Каков соответствующий код ошибки, если клиент хочет добавить файл, который уже существует? Я не знаю, что использовать... Я просмотрел RFC, но не могу найти соответствующий код.

2 ответа

Его редко используемый код ответа, но мне кажется, что 409 Conflict может наилучшим образом соответствовать вашим потребностям:

Запрос не может быть выполнен из-за конфликта с текущим состоянием ресурса. Этот код разрешен только в ситуациях, когда ожидается, что пользователь сможет разрешить конфликт и повторно отправить запрос. Тело ответа ДОЛЖНО включать достаточную информацию, чтобы пользователь мог распознать источник конфликта. В идеальном случае объект ответа будет содержать достаточную информацию для пользователя или агента пользователя для устранения проблемы; однако это может быть невозможно и не требуется.

Конфликты чаще всего возникают в ответ на запрос PUT. Например, если использовалось управление версиями, а объект PUT включал изменения в ресурс, который конфликтует с теми, которые были сделаны с помощью более раннего (стороннего) запроса, сервер может использовать ответ 409, чтобы указать, что он не может выполнить запрос, В этом случае объект ответа, скорее всего, будет содержать список различий между двумя версиями в формате, определяемом ответом Content-Type.


409 Конфликт или другой из диапазона 400, например 428, будут работать, но, возможно, вы нарушите REST, если вы не разрешаете клиенту перезаписывать ресурс с помощью PUT.

PUT должен быть идемпотентным, и если вы откажетесь выполнить команду на основе того, что уже существует, идемпотентность нарушена.

licensed under cc by-sa 3.0 with attribution.