Ответ
HTTP-методы (или "глаголы") указывают на желаемое действие, которое должно быть выполнено для указанного ресурса. Они определяют семантику клиентского запроса.
Основные методы:
GET: Запрашивает представление ресурса. Не должен изменять состояние сервера. Является безопасным и идемпотентным.POST: Отправляет данные на сервер для создания нового ресурса (например, отправка формы). Не является идемпотентным.PUT: Полностью заменяет существующий ресурс данными из тела запроса. Если ресурс не существует, может его создать. Является идемпотентным.PATCH: Вносит частичные изменения в ресурс. Не является идемпотентным по умолчанию, но может быть реализован как таковой.DELETE: Удаляет указанный ресурс. Является идемпотентным.
Важные концепции:
- Идемпотентность: Повторное выполнение одного и того же запроса приводит к тому же результату, что и одиночный запрос (например, многократный
DELETE /users/1удалит пользователя один раз). - Безопасность: Метод не изменяет состояние сервера (например,
GET,HEAD,OPTIONS).
Пример использования с библиотекой requests в Python:
import requests
# Получение данных
response_get = requests.get('https://api.example.com/items/1')
print(f"GET status: {response_get.status_code}, data: {response_get.json()}")
# Создание нового ресурса
new_item = {'name': 'New Item', 'price': 100}
response_post = requests.post('https://api.example.com/items', json=new_item)
print(f"POST status: {response_post.status_code}") # Ожидается 201 Created
# Удаление ресурса
response_delete = requests.delete('https://api.example.com/items/1')
print(f"DELETE status: {response_delete.status_code}") # Ожидается 200 OK или 204 No Content Ответ 18+ 🔞
А, слушай, смотри, вот эти ваши HTTP-методы, они же как глаголы, блядь! Прям команды для сервера, что с ресурсом делать-то надо. Не просто так запросы шляются туда-сюда, а с намерением, сука!
Ну, основные-то, которые на каждом углу:
GET: Это типа "дай-ка посмотреть". Запросы представление ресурса, как он там поживает. Главное — безопасный он и идемпотентный, то есть сервер после него не должен меняться, а если ты его сто раз дернёшь — хуй с ним, ничего страшного, тот же ответ получишь. "Покажи пользователя №1" — и всё.POST: А вот это уже "создай что-то новенькое". Кидаешь данные на сервер, типа форму отправил. Он не идемпотентный, ёпта! Если два раза на кнопку "Отправить заказ" нажмёшь — два заказа и получишь, пиздец! Осторожно с ним.PUT: "Замени всё вот этим". Полностью перезаписывает ресурс. Если его нет — может и создать. Идемпотентный, слава богу. Десять раз скажешь "замени пользователя №1 вот этими данными" — в итоге он будет именно такими, а не десятью копиями.PATCH: "Ну подправь чутка". Частичные изменения. По умолчанию не идемпотентный, но если очень постараться, можно сделать и таким. Хитрый метод, с ним надо аккуратнее.DELETE: Ну тут всё ясно, "удали нахуй". Идемпотентный, конечно. Сколько раз ни говори "удали пользователя №1" — удалён он будет один раз, второй раз уже ошибку получишь, что нет его.
Концепции, блядь, важные:
- Идемпотентность: Это когда от повторения одного и того же запроса мир не перевернётся.
GET,PUT,DELETE— они такие.POST— нет, он каждый раз новое говно создаёт. - Безопасность: Это когда метод сервер не трогает.
GET,HEAD,OPTIONS— просто смотрят, не дёргают.
Ну и как это в коде выглядит, на питоне с requests:
import requests
# Получение данных (просто посмотреть)
response_get = requests.get('https://api.example.com/items/1')
print(f"GET status: {response_get.status_code}, data: {response_get.json()}")
# Создание нового ресурса (вот тут осторожно, не спами!)
new_item = {'name': 'New Item', 'price': 100}
response_post = requests.post('https://api.example.com/items', json=new_item)
print(f"POST status: {response_post.status_code}") # Ожидается 201 Created
# Удаление ресурса (прощай, навсегда)
response_delete = requests.delete('https://api.example.com/items/1')
print(f"DELETE status: {response_delete.status_code}") # Ожидается 200 OK или 204 No Content
Вот и вся магия, ёпта. Главное — не путать, когда POST, а когда PUT, а то накосячишь на ровном месте, сервер тебе такого наговорит...