RESTful GET, который может изменить состояние системы? - PullRequest
0 голосов
/ 21 февраля 2020

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

План состоит в том, что последующие приложения будут выполнять вызов GET для этой службы для получения объекта. Если срок действия объекта истек, служба извлекает новый объект, кэширует его и возвращает вызывающему.

И вот моя дилемма - таким образом операция GET изменяет состояние системы, выбирая новый объект. Я уверен, что я нарушаю принципы REST здесь, или есть веские основания для этого? Должен ли я просто изменить метод на POST?

1 Ответ

0 голосов
/ 21 февраля 2020

Таким образом, операция GET изменяет состояние системы, выбирая новый объект. Я уверен, что я нарушаю принципы REST здесь, или есть веские основания для этого? Должен ли я просто изменить метод на POST?

Короткая версия: это хорошо.

Более длинная версия: REST говорит, что наши ресурсы имеют общую "унифицированную" семантику - значение сообщения не зависят от того, на какой ресурс вы ссылаетесь.

В случае HTTP основным дискриминатором для запросов является метод. Для метода GET семантика (в настоящее время) описывается RF C 7231. GET явно идентифицируется как safe

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

Если вам, серверу, нужно измените кучу ваших частных хранилищ информации, чтобы вычислить текущее представление ресурса, это детали реализации, скрытые за фасадом HTTP. Вы можете делать то, что вам нравится.

Фундаментально, что безопасно означает , это то, что любой, кто знает идентификатор, может запросить текущее представление ресурса в любое время. Это позволяет браузеру повторять запросы, когда сеть нестабильна, или для пауков ползать вокруг индексации net, зная, что их запросы не причиняют вреда (или, точнее, что ошибка любого вреда, причиненного этими запросами, правильно назначена сервер).

Если все в порядке, то GET - совершенно "RESTful" метод, который можно использовать для этих запросов.

...