Каково назначение HTTP-метода DELETE в REST API?

Ответ

HTTP-метод DELETE используется в REST API для удаления конкретного ресурса, идентифицируемого по URI.

Ключевые характеристики:

  1. Идемпотентность: DELETE является идемпотентным методом. Это означает, что повторное выполнение одного и того же запроса DELETE приведет к тому же состоянию системы. Первый запрос удалит ресурс, а последующие просто подтвердят, что ресурс уже удален (обычно возвращая 404 Not Found).

  2. Специфичность: Запрос всегда направлен на конкретный ресурс (например, /api/users/123), в отличие от POST, который может создавать ресурс в коллекции (/api/users).

Ответы сервера:

  • 200 OK: Ресурс успешно удален, и в теле ответа может содержаться сообщение об этом.
  • 204 No Content: Ресурс успешно удален, тело ответа пустое. Это частый и предпочтительный ответ для DELETE.
  • 404 Not Found: Ресурс, который пытались удалить, не найден.

Пример на Flask:

from flask import Flask, jsonify

app = Flask(__name__)

# Имитация базы данных
users = {1: {"name": "Alice"}, 2: {"name": "Bob"}}

@app.route('/api/users/<int:user_id>', methods=['DELETE'])
def delete_user(user_id):
    if user_id in users:
        del users[user_id]
        # 204 No Content - лучший выбор, так как клиенту не нужна доп. информация
        return '', 204
    else:
        # 404 Not Found, если пользователь не существует
        return jsonify({"error": "User not found"}), 404

Ответ 18+ 🔞

А, ну вот, смотри, смотри, блядь! HTTP-метод DELETE, ёпта. Это когда тебе надо нахуй послать какой-то конкретный ресурс в REST API. Не просто так, а именно тот, который ты по URI указал.

Что за зверь такой:

  1. Идемпотентность, блядь: Это значит, что DELETE — он как зануда. Первый раз ты его попросил — он ресурс удалил. Второй раз попросил — он такой: «Да похуй, он уже удалён, мудак». И так сто раз. Состояние системы не меняется, просто каждый раз подтверждает, что всё, пиздец, нету. Обычно потом 404 Not Found шлёт, типа «чё ты ко мне пристал, я его уже в пизду отправил».

  2. Специфичность: Ты ж не можешь просто сказать «удали всех пользователей» через DELETE на /api/users. Это пиздец какой-то, не по-пацански. Ты должен тыкнуть пальцем: «Вот этого, сука, с ID 123 — нахуй». То есть /api/users/123. Всё чётко, прицельно.

А что сервер в ответ бормочет:

  • 200 OK: Ну, удалил, удалил, на, получи своё сообщение «успешно» в теле ответа. Радуйся.
  • 204 No Content: Вот это, блядь, красота! Удалил и молчишь в тряпочку. Тела ответа нет, вообще нихуя. Клиенту и не надо ничего, он и так понял — дело сделано. Самый частый и правильный ответ, ебать.
  • 404 Not Found: А это когда ты такой умный пришёл удалять то, чего нет. Сервер смотрит на тебя как на идиота: «Чувак, какой user_id 999? Ты охуел? Его никогда не было, или я его уже давно в ротберунчик отправил. Иди отсюда».

Ну и примерчик, чтобы совсем пиздец понятно было (на Flask):

from flask import Flask, jsonify

app = Flask(__name__)

# Ну типа наша «база данных», два лоха в словаре
users = {1: {"name": "Alice"}, 2: {"name": "Bob"}}

@app.route('/api/users/<int:user_id>', methods=['DELETE'])
def delete_user(user_id):
    if user_id in users:
        del users[user_id]  # Просто выкинули нахуй из словаря
        # 204 No Content — идеально, молчание — золото
        return '', 204
    else:
        # 404 Not Found — а че ты хотел, пидор? Его нет!
        return jsonify({"error": "User not found"}), 404

Вот и вся магия, блядь. Пришёл, указал, удалил, ушёл. Красота.