Ответ
Основные методы HTTP определяют действие, которое необходимо выполнить для указанного ресурса.
Основные методы и их назначение:
GET
: Запрашивает представление ресурса. Не изменяет состояние сервера. Идемпотентный.POST
: Отправляет данные на сервер для создания нового ресурса (например, добавление пользователя). Повторные вызовы создают новые ресурсы. Не является идемпотентным.PUT
: Полностью заменяет существующий ресурс данными из тела запроса. Если ресурс не существует, может его создать. Идемпотентный (повторные вызовы с теми же данными не меняют результат).DELETE
: Удаляет указанный ресурс. Идемпотентный (повторное удаление уже удаленного ресурса вернет тот же результат, например,404 Not Found
).PATCH
: Применяет частичные изменения к ресурсу. Не является идемпотентным по своей природе, хотя может быть реализован идемпотентно.HEAD
: АналогиченGET
, но сервер возвращает только заголовки, без тела ответа. Используется для проверки существования ресурса или получения метаданных. Идемпотентный.OPTIONS
: Запрашивает информацию о доступных опциях взаимодействия с ресурсом (например, какие методы разрешены). Идемпотентный.
Идемпотентность означает, что многократное повторение одного и того же запроса приводит к тому же результату, что и одиночный запрос.
Представление в Go:
В стандартной библиотеке net/http
методы HTTP представлены в виде строковых констант для удобства и предотвращения опечаток:
http.MethodGet // "GET"
http.MethodPost // "POST"
http.MethodPut // "PUT"
http.MethodDelete // "DELETE"
http.MethodPatch // "PATCH"
http.MethodHead // "HEAD"
http.MethodOptions // "OPTIONS"
Пример использования в HTTP-сервере на Go:
func handleUsers(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case http.MethodGet:
// Логика для получения списка пользователей
fmt.Fprintln(w, "Getting users...")
case http.MethodPost:
// Логика для создания нового пользователя
fmt.Fprintln(w, "Creating a user...")
default:
// Сообщаем клиенту, что данный метод не поддерживается
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
}
}
Официальная спецификация методов находится в RFC 7231 и RFC 5789 (для PATCH
).