Ответ
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}')