2012-05-24 3 views
7

Например, если я вызываю GET, чтобы получить элемент, удалите его с помощью DELETE и снова GET, как должен работать второй GET?Как обращаться с устаревшими данными в REST?

Я имею в виду, правильно ли следуя принципам REST, каков правильный подход при этом, поскольку GET можно кэшировать и все? Каков подход к обработке устаревших данных в REST?

+0

Если вы только что удалили предмет, почему вы пытаетесь снова «получить» его? Этого не будет. Может быть, я что-то упустил или вопрос не был ясен. –

+0

@Brent Pabst: Рассмотрим, например, ссылки в приложении пользовательского интерфейса, где удаление происходит во всплывающем окне, но ссылка GET находится на открытой странице и не обновляется или переносится почтой, а пользователь вставляет их в адресную строку браузера непосредственно между удаление и т. д. Это зависит от кеша! Идея состоит в том, что если элемент больше не существует, как должен работать GET. Отключить ВСЕ кеширование? Допустимо ли иметь кеш? Каков подход REST ко всему этому? – JohnDoDo

+2

Второй GET, естественно, вернет код HTTP '404 Not Found'. Кэширование - совсем другое дело, для которого я дам удивительно непрозрачный ответ: «Это зависит». Но если * * - второй GET, кажется довольно очевидным, что он будет производить 404? –

ответ

4

Прежде всего, поведение зависит от того, какой вызов DELETE был возвращен в качестве кода ответа.

Если DELETE возвращает 200 - OK или 204 - No Content, то клиент должен получить 404 - Not Found при следующем вызове GET. Это потому, что 202 и 204 означает, что ресурс был удален немедленно.

Однако, если DELETE возвращает 202 - Accepted, существует вероятность того, что клиент сможет успешно получить ресурс в течение некоторого времени после этого. Это потому, что 202 означает, что ресурс отмечен для удаления, но не обязательно очищается немедленно.

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

0

Как указано выше, GET после DELETE должен производить ошибку HTTP 404, независимо от кеширования, которая может быть на месте. Логический код должен быть достаточно умным, чтобы удалить запись из постоянного хранилища, а также хранилище или кэш в памяти. Кроме того, пользовательский интерфейс должен иметь возможность обрабатывать результат 404 с любым потоком или процессом, который вы считаете подходящим.

Смежные вопросы