Ответ
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-ом данные менять. Это пиздец, товарищи, это дичь полная.