Это должен быть запрос GET или PATCH? - PullRequest
0 голосов
/ 19 июня 2019

если я делаю запрос на получение некоторых данных из базы данных без отправки каких-либо обновлений, однако я отмечаю запись в базе данных, чтобы сказать, что данные были получены, делает ли это запрос PATCH или GET?

Ответы [ 3 ]

1 голос
/ 19 июня 2019

Спецификация HTTP достаточно понятна, если вы прочитаете определение safe:

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

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

...

Таким образом, изменение состояния при загрузке, вызванной GET, возможно, если клиент не знает об этом изменении состояния.

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

С учетом вышесказанного вы всегда можете использовать POST, если чувствуете себя некомфортно из-за определенных операций HTTP, поскольку POST буквально позволяет обрабатывать запрос в соответствии с собственной семантикой ресурсов.

Что приводит меня к следующему пункту переосмысления вашего дизайна. Возвращать какой-то документ, который включает его собственное состояние, как-то странно, на мой взгляд. Обычно такая информация представляет собой метаданные о документе, но не сам ресурс. Здесь вы можете либо использовать HTTP-заголовки для передачи такой информации клиенту, либо спроектировать состояние этого ресурса как еще один ресурс, который вы можете подсказать клиенту о предоставлении ему ссылки для поиска, если он заинтересован.

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

1 голос
/ 19 июня 2019

Краткий ответ: Нет, это все еще GET.

RFC 7231 определяет сейф

Методы запроса считаются «безопасными», если их определенная семантика по существу доступна только для чтения ....

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

Так что, если клиент пытается получить текущее представление ресурса, тот факт, что ваша реализация делает небольшую бухгалтерию на стороне, не меняет семантику запроса.

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

0 голосов
/ 20 июня 2019

Это должно быть GET.

Вы изменяете некоторые данные с помощью этого запроса, но не изменяете извлекаемый ресурс, измененные данные - это, скорее, метаданные.

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

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