В чем разница между основными методами HTTP-запросов?

Ответ

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

Основные методы и их назначение:

  1. GET — запрашивает представление ресурса. Безопасный и идемпотентный.

    GET /api/users/123 HTTP/1.1
    Host: example.com
    • Не имеет тела запроса.
    • Используется для чтения данных.
  2. POST — отправляет данные для создания нового ресурса. Не идемпотентный.

    POST /api/users HTTP/1.1
    Content-Type: application/json
    {"name": "Alice"}
    • Имеет тело запроса с данными.
    • Сервер определяет URI для нового ресурса.
  3. PUT — полностью заменяет ресурс по указанному URI. Идемпотентный.

    PUT /api/users/123 HTTP/1.1
    Content-Type: application/json
    {"name": "Alice Updated"}
    • Если ресурс существует — обновляется, если нет — может создаваться.
  4. PATCH — применяет частичные изменения к ресурсу. Идемпотентный (должен быть).

    PATCH /api/users/123 HTTP/1.1
    Content-Type: application/json
    [{"op": "replace", "path": "/name", "value": "Bob"}]
  5. DELETE — удаляет указанный ресурс. Идемпотентный.

    DELETE /api/users/123 HTTP/1.1
Сравнительная таблица: Метод Назначение Тело запроса Идемпотентность Безопасность
GET Получить ресурс Нет Да Да
POST Создать ресурс Да Нет Нет
PUT Заменить ресурс Да Да Нет
PATCH Частично обновить Да (Да) Нет
DELETE Удалить ресурс Нет Да Нет

Идемпотентность означает, что многократное выполнение одного и того же запроса дает идентичный результат. Безопасность означает, что метод не изменяет состояние сервера.

Ответ 18+ 🔞

Слушай, а вот эти ваши HTTP-методы — это ж, блядь, как команды для сервера, типа «эй, мужик, сделай что-то с этой штукой!». Каждый со своим характером, прям как люди.

Основные засранцы и что они творят:

  1. GET — это такой вежливый, но наглый зритель. Пришёл, посмотрел, ничего не трогал. Безопасный и идемпотентный — сколько раз ни приставай, покажет одно и то же.

    GET /api/users/123 HTTP/1.1
    Host: example.com
    • Тела нет, один рот.
    • Читает, как старый дед газету. Только получает инфу.
  2. POST — это тот самый парень, который вечно что-то создаёт из хлама. Не идемпотентный — нажмёшь два раза, и получишь двух одинаковых уродцев.

    POST /api/users HTTP/1.1
    Content-Type: application/json
    {"name": "Alice"}
    • Тащит с собой тело запроса, как мешок с гвоздями.
    • Сервер потом сам решает, куда этого новорождённого приткнуть.
  3. PUT — максималист, ёпта. Видит ресурс — говорит «всё, старьё, нахуй!» и кладёт своё. Идемпотентный — сколько раз ни принеси ему один и тот же ящик, на том же месте будет тот же ящик.

    PUT /api/users/123 HTTP/1.1
    Content-Type: application/json
    {"name": "Alice Updated"}
    • Если на месте пусто — создаст, если что-то было — перепишет, блядь, к ебеням.
  4. PATCH — хирург, или просто хитрая жопа. Меняет только то, что попросили, а не всю сущность. Идемпотентным должен быть — иначе это пиздец, а не метод.

    PATCH /api/users/123 HTTP/1.1
    Content-Type: application/json
    [{"op": "replace", "path": "/name", "value": "Bob"}]
  5. DELETE — громила. Пришёл, удалил, ушёл. Идемпотентный — удалённый ресурс второй раз уже не удалить, он же труп.

    DELETE /api/users/123 HTTP/1.1
Табличка для наглядности, а то мозги заплетаются: Метод Что делает Тащит ли тело? Идемпотентный? Безопасный?
GET Достаёт инфу Нет Да Да
POST Создаёт нового уродца Да Нет Нет
PUT Полностью меняет сущность Да Да Нет
PATCH Чинит костыли Да (Да) Нет
DELETE Отправляет на хуй Нет Да Нет

Идемпотентность — это когда десять раз пнул один и тот же табурет, а он сломался только один раз. Безопасность — это когда пнул, а он даже не поцарапался. GET — безопасный, остальные — нет, они всё меняют, блядь.