Параметр запроса с помощью метода http PUT — REST API

#rest #sprin&-rest

#rest #sprin&-rest

Вопрос:

Я передаю объект запроса и переменные path в моем методе http PUT для обновления записи. Можно ли передавать дополнительные данные (например, временную метку) в качестве параметров запроса, которые я хочу сохранить в окончательной записи, имеющей дополнительное поле (скажем, временную метку) по сравнению с объектом запроса?

Ответ №1:

Можно ли передавать дополнительные данные (например, временную метку) в качестве параметров запроса, которые я хочу сохранить в окончательной записи, имеющей дополнительное поле (скажем, временную метку) по сравнению с объектом запроса?

Краткий ответ: вероятно, это означает не то, что вы думаете.

Можно ли использовать параметры запроса в запросе PUT? Абсолютно. Параметры запроса — это просто еще одна часть идентификатора ресурса.

 /15f3221f-ee3b-4155-bc75-f80855a9187e/abc
/15f3221f-ee3b-4155-bc75-f80855a9187e?abc
  

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

В этом нет ничего волшебного abc конечно, вы могли бы использовать там временную метку

 /15f3221f-ee3b-4155-bc75-f80855a9187e?1970-01-01
  

Изменение временной метки изменяет идентификатор; что касается компонентов общего назначения, то в следующих двух примерах идентифицируются разные ресурсы

 /15f3221f-ee3b-4155-bc75-f80855a9187e?1970-01-01
/15f3221f-ee3b-4155-bc75-f80855a9187e?1970-01-02
  

Вы могли бы представить их как две разные страницы настольного календаря. Изменение списка встреч в вашем документе 1970-01-02 вообще не должно изменить ваш календарь на 1970-01-01.

Метаданные о представлении обычно встраиваются в само представление (например, элемент HEAD в HTML-документе) или в заголовки HTTP. Насколько я могу судить, у нас нет стандартизированного заголовка, который соответствовал бы семантике, которую вы хотите.

Все, что сказано: сервер имеет БОЛЬШУЮ свободу в том, как он интерпретирует запрос на обновление представления /15f3221f-ee3b-4155-bc75-f80855a9187e?1970-01-02 . Например, обновление этого ресурса может также обновить представления многих других ресурсов.

(Однако имейте в виду кэширование — существует лишь ограниченное количество способов сообщить клиенту общего назначения, что некоторые кэшированные представления были признаны недействительными в результате запроса.)