Каковы основные HTTP-методы и их семантическое назначение

Ответ

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, а то накосячишь на ровном месте, сервер тебе такого наговорит...