В чем разница между HTTP-методами GET, POST и PUT?

Ответ

Это основные HTTP-методы, различающиеся семантикой (назначением) и свойствами.

Метод Назначение Свойства Данные
GET Получение (чтение) данных с сервера. Безопасный (не изменяет состояние сервера), идемпотентный. Передаются в URL (query string).
POST Отправка данных на сервер для создания нового ресурса или выполнения операции. Не безопасный, не идемпотентный. Передаются в теле запроса (body).
PUT Полное обновление существующего ресурса или его создание по известному URI. Не безопасный, но идемпотентный. Передаются в теле запроса (body).

Пояснение свойств:

  • Безопасный (Safe): Метод не должен изменять состояние сервера.
  • Идемпотентный (Idempotent): Многократное выполнение одного и того же запроса дает идентичный результат состоянию после первого выполнения.

Примеры в контексте REST API:

// GET - получить пользователя с id=123
GET /api/users/123

// POST - создать нового пользователя
POST /api/users
Body: {"name": "John", "email": "john@example.com"}

// PUT - полностью обновить данные пользователя с id=123
PUT /api/users/123
Body: {"name": "John Doe", "email": "doe@example.com"}

Ответ 18+ 🔞

А, ну вот, опять эти ваши HTTP-методы, блядь. Сидишь, читаешь, а там "семантика", "свойства" — ёпта, глаза сломаешь. Давайте разжую, как есть, на пальцах, а то вы тут, пизда, с умным видом таблички рисуете.

Смотри сюда, у нас тут три главных героя: GET, POST и PUT. Как в плохом анекдоте, только про веб.

GET — это как самый вежливый гость. Приходит, сука, в гости, смотрит, что в холодильнике лежит, но нихуя не трогает. Безопасный, идемпотентный, всё такое. То есть можешь его хоть сто раз вызвать — сервер не обосрётся от этого, данные не поменяются. Всё, что он хочет сказать, он тащит прямо в адресной строке, как последний распиздяй. ?id=123&name=Vasya — вот это его язык, блядь.

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

PUT — это такой максималист, ёпта. "Всё старое — нахуй, будет по-моему!" Полное обновление ресурса. Не безопасный, но идемпотентный. То есть если ты им десять раз подряд одно и то же ебальник пользователя поменяешь, результат будет как после первого раза — один обновлённый ебальник, а не десять. Данные тоже в теле, как у POST.

А теперь, чтобы твоя мартышлюшка-логика не взорвалась, вот тебе примеры, как это в коде выглядит:

// GET - получить пользователя с id=123. Просто посмотреть, не трогая.
GET /api/users/123

// POST - создать нового пользователя. Вжух, и он уже есть, пиздец.
POST /api/users
Body: {"name": "John", "email": "john@example.com"}

// PUT - полностью обновить данные пользователя с id=123. Старое имя "John" пошло нахуй, теперь он "John Doe".
PUT /api/users/123
Body: {"name": "John Doe", "email": "doe@example.com"}

Вот и вся магия, блядь. Главное — не путай их местами, а то получишь волшебный пиздец, когда вместо чтения данных всё похеришь.