Ответ
HTTP-методы (или глаголы) определяют действие, которое клиент хочет выполнить с ресурсом на сервере.
| Метод | Назначение | Идемпотентность* | Безопасность** | Пример сценария |
|---|---|---|---|---|
| GET | Получение данных или представления ресурса. | Да | Да | Получение страницы товара, списка пользователей. |
| POST | Создание нового ресурса или отправка данных для обработки. | Нет | Нет | Отправка формы регистрации, создание заказа. |
| PUT | Полное обновление (или создание) ресурса по известному URI. | Да | Нет | Обновление всего профиля пользователя. |
| PATCH | Частичное обновление ресурса. | Нет*** | Нет | Изменение только email в профиле пользователя. |
| DELETE | Удаление ресурса. | Да | Нет | Удаление статьи, отмена заказа. |
| HEAD | Аналогичен GET, но сервер возвращает только заголовки ответа (без тела). | Да | Да | Проверка размера файла перед загрузкой (заголовок Content-Length). |
| OPTIONS | Получение списка HTTP-методов, поддерживаемых для данного ресурса. | Да | Да | Определение возможностей CORS (заголовок Allow). |
Идемпотентность: многократное выполнение одного и того же запроса дает тот же результат, что и однократное. Безопасность: метод не должен изменять состояние сервера. *PATCH не гарантирует идемпотентность по спецификации, но может быть реализован как идемпотентный.
Пример PUT-запроса на Java 11+:
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com/users/123"))
.header("Content-Type", "application/json")
.PUT(HttpRequest.BodyPublishers.ofString(
"{"name": "John Doe", "email": "john@example.com"}"
))
.build();
// Отправка запроса и обработка ответа...