Перечисли основные HTTP-методы и их назначение.

Ответ

HTTP-методы (или "глаголы") определяют действие, которое клиент хочет выполнить с ресурсом на сервере. В контексте REST API они напрямую соотносятся с операциями CRUD (Create, Read, Update, Delete).

Метод Назначение (CRUD) Идемпотентность Безопасность
GET Получение (чтение) данных ресурса. Да Да
POST Создание нового ресурса или выполнение сложного действия. Нет Нет
PUT Полное обновление (или создание с заданным ID) ресурса. Да Нет
PATCH Частичное обновление ресурса. Нет* Нет
DELETE Удаление ресурса. Да Нет
HEAD Аналогичен GET, но сервер возвращает только заголовки (без тела ответа). Используется для проверки доступности или метаданных. Да Да
OPTIONS Получение информации о поддерживаемых методах для данного ресурса (CORS). Да Да

*Идемпотентность PATCH зависит от реализации. Строго по спецификации он не гарантированно идемпотентен.

Практический пример использования в Python:

import requests
BASE_URL = 'https://api.example.com/books'

# 1. GET: Получить список всех книг
books = requests.get(BASE_URL).json()

# 2. POST: Добавить новую книгу (создание)
new_book = {"title": "Clean Code", "author": "Robert Martin"}
create_resp = requests.post(BASE_URL, json=new_book)

# 3. GET: Получить конкретную книгу (чтение)
book_id = create_resp.json()['id']
single_book = requests.get(f"{BASE_URL}/{book_id}").json()

# 4. PUT: Полностью обновить книгу (обновление)
updated_data = {"title": "Clean Code", "author": "Uncle Bob", "year": 2008}
requests.put(f"{BASE_URL}/{book_id}", json=updated_data)

# 5. DELETE: Удалить книгу (удаление)
requests.delete(f"{BASE_URL}/{book_id}")

Ответ 18+ 🔞

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

Представь, что у тебя есть полка с книгами — это твой сервер, ресурс, понимаешь? А ты — это клиент, который к этой полке подходит и что-то с ней делает. Вот эти методы — они как команды, которые ты этой полке отдаёшь. И каждая команда — это конкретное действие, а не просто «ой, сделай что-нибудь».

GET — это самый безобидный, как кот Васька. Подошёл, посмотрел на полку, прочитал названия книг. Ничего не трогал, ничего не сломал. Идемпотентный? Да, блядь, хоть сто раз смотри — полка не изменится. Безопасный? Абсолютно. Просто читаешь, хули тут.

POST — а вот это уже активные действия, сука. Ты принёс новую книжку и суёшь её на полку. Создаёшь новый ресурс. Сделал это один раз — на полке появилась книга. Сделал второй раз с теми же данными — появится вторая, идентичная, книга. Пиздец, уже две. Не идемпотентный, не безопасный. Меняешь состояние системы, падла.

PUT — это когда ты взял книгу с полки и переписал её заново, от корки до корки. Полное обновление, блядь. Или если на полке не было книги с таким ID, ты её туда ставишь. Сделал это один раз — книга обновилась. Сделал десять раз подряд с одними и теми же данными — она будет такая же, как после первого раза. Идемпотентный? Да, ёпта. Безопасный? Нет, конечно, ты же её меняешь, ебать.

PATCH — это хитрая жопа. Не хочешь переписывать всю книгу, а только одну страничку исправить. Частичное обновление. Теоретически, если десять раз подряд исправлять одну и ту же опечатку на одну и ту же букву — результат будет тот же. Но на практике, если логика кривая, можно и наебнуться. Поэтому в табличках всегда пишут звёздочку, что идемпотентность не гарантирована, блядь. Хуй его знает, что там на сервере происходит.

DELETE — ну тут всё ясно, как божий день. Взял книгу с полки и выкинул в окно. Удалил ресурс. Удалил один раз — книги нет. Пытаешься удалить второй раз — а её уже нет, сука. Состояние системы не меняется (книги-то уже нет), поэтому метод идемпотентный. Безопасный? Да ты что, охуел? Ты ж только что ресурс уничтожил!

А ещё есть HEAD и OPTIONS — это такие вспомогательные штуки. HEAD — это как GET, но ты только заголовки смотришь, а саму книгу в руки не берёшь. Проверить, есть ли она вообще. OPTIONS — это ты подошёл к полке и спрашиваешь: «А что мне вообще с тобой можно делать? Можно посмотреть? Можно добавить? Можно удалить?». Сервер тебе в ответ шлёт список разрешённых методов. Очень полезно для CORS, но это уже другая история, про которую можно овердохуища говорить.

Вот, смотри, как это на практике в коде выглядит. Всё просто, блядь, как три копейки.

import requests
BASE_URL = 'https://api.example.com/books'

# 1. GET: Получить список всех книг (просто смотрим на полку)
books = requests.get(BASE_URL).json()

# 2. POST: Добавить новую книгу (создание, суём на полку новинку)
new_book = {"title": "Clean Code", "author": "Robert Martin"}
create_resp = requests.post(BASE_URL, json=new_book)

# 3. GET: Получить конкретную книгу (достаём одну и читаем)
book_id = create_resp.json()['id']
single_book = requests.get(f"{BASE_URL}/{book_id}").json()

# 4. PUT: Полностью обновить книгу (стираем всё и пишем заново)
updated_data = {"title": "Clean Code", "author": "Uncle Bob", "year": 2008}
requests.put(f"{BASE_URL}/{book_id}", json=updated_data)

# 5. DELETE: Удалить книгу (выкидываем в мусорку, пиздец)
requests.delete(f"{BASE_URL}/{book_id}")

Вот и вся магия, блядь. Главное — не путать, когда что использовать. А то некоторые POST-ом удалять пытаются, или GET-ом данные менять. Это пиздец, товарищи, это дичь полная.