Ответ
HTTP-методы (или «глаголы») определяют операцию, которую клиент хочет выполнить над ресурсом, идентифицируемым URL.
| Метод | Идемпотентен? | Безопасен? | Назначение | Пример (RESTful-стиль) |
|---|---|---|---|---|
| GET | Да | Да | Получение данных о ресурсе. Не должен изменять состояние сервера. | GET /api/users – получить список пользователей. |
| POST | Нет | Нет | Создание нового ресурса. Тело запроса содержит данные для создания. | POST /api/users – создать нового пользователя. |
| PUT | Да | Нет | Полное обновление ресурса. Тело запроса содержит новое представление ресурса. | PUT /api/users/123 – заменить все данные пользователя с id=123. |
| PATCH | Нет | Нет | Частичное обновление ресурса. Тело запроса содержит только изменяемые поля. | PATCH /api/users/123 – обновить только email пользователя. |
| DELETE | Да | Нет | Удаление указанного ресурса. | DELETE /api/users/123 – удалить пользователя с id=123. |
| HEAD | Да | Да | Как GET, но без тела ответа. Используется для получения метаданных (заголовков). | HEAD /api/users – проверить существование и размер ресурса. |
| OPTIONS | Да | Да | Определение поддерживаемых методов и политик CORS для ресурса. | OPTIONS /api/users – узнать, можно ли делать POST запрос. |
Пояснение терминов:
- Идемпотентность: Многократное выполнение одного и того же запроса даёт идентичный результат (как у PUT, DELETE). POST не идемпотентен — два одинаковых запроса создадут два ресурса.
- Безопасность: Метод не изменяет состояние сервера (только GET, HEAD, OPTIONS).
Пример использования с библиотекой requests:
import requests
import json
# GET
users = requests.get('https://api.example.com/users').json()
# POST
new_user = {'name': 'John'}
response = requests.post('https://api.example.com/users', json=new_user)
created_id = response.json()['id']
# PUT
update_data = {'name': 'John', 'email': 'new@mail.com'}
requests.put(f'https://api.example.com/users/{created_id}', json=update_data)
# DELETE
requests.delete(f'https://api.example.com/users/{created_id}') Ответ 18+ 🔞
А, слушай, про эти ваши HTTP-методы, ну, про глаголы, блядь! Это ж как команды для сервера, типа "эй, чувак, сделай вот это с той штукой, на которую ссылка ведёт". Просто, казалось бы, но тут свои тонкости, ёпта.
Вот смотри, таблица, блядь, наглядная, чтобы не путаться. Главное — запомнить, кто что делает и какие у них повадки.
| Метод | Идемпотентен? | Безопасен? | Назначение | Пример (RESTful-стиль) |
|---|---|---|---|---|
| GET | Да | Да | Получение данных о ресурсе. Не должен изменять состояние сервера. | GET /api/users – получить список пользователей. |
| POST | Нет | Нет | Создание нового ресурса. Тело запроса содержит данные для создания. | POST /api/users – создать нового пользователя. |
| PUT | Да | Нет | Полное обновление ресурса. Тело запроса содержит новое представление ресурса. | PUT /api/users/123 – заменить все данные пользователя с id=123. |
| PATCH | Нет | Нет | Частичное обновление ресурса. Тело запроса содержит только изменяемые поля. | PATCH /api/users/123 – обновить только email пользователя. |
| DELETE | Да | Нет | Удаление указанного ресурса. | DELETE /api/users/123 – удалить пользователя с id=123. |
| HEAD | Да | Да | Как GET, но без тела ответа. Используется для получения метаданных (заголовков). | HEAD /api/users – проверить существование и размер ресурса. |
| OPTIONS | Да | Да | Определение поддерживаемых методов и политик CORS для ресурса. | OPTIONS /api/users – узнать, можно ли делать POST запрос. |
А теперь, сука, расшифровка для тех, кто в танке:
- Идемпотентность: Это когда ты можешь тыкать в кнопку сто раз, а результат будет как от одного нажатия. Ну, типа, удалил запись — она удалилась. Ещё раз нажал DELETE на ту же запись — она уже удалена, хуй с горы, ничего не происходит. А вот POST — не идемпотентный, нажмёшь два раза — получишь двух одинаковых пользователей, и потом будешь ебаться, кто из них настоящий.
- Безопасность: Это вообще про то, чтобы сервер не трогать. Типа, пришёл, посмотрел (GET), ушёл. Ничего не сломал, не создал, не удалил. Чисто почитать.
Ну и чтобы совсем жизнь мёдом не казалась, вот тебе пример на питоне, с этой библиотекой requests. Код не трогаю, он святой, блядь.
import requests
import json
# GET
users = requests.get('https://api.example.com/users').json()
# POST
new_user = {'name': 'John'}
response = requests.post('https://api.example.com/users', json=new_user)
created_id = response.json()['id']
# PUT
update_data = {'name': 'John', 'email': 'new@mail.com'}
requests.put(f'https://api.example.com/users/{created_id}', json=update_data)
# DELETE
requests.delete(f'https://api.example.com/users/{created_id}')
Вот и вся магия. Главное — не путай PUT с PATCH, а то вместо смены почты весь профиль пользователя в пизду угробишь. А POST используй для создания, а не для всего подряд, как некоторые распиздяи.