В прошлых уроках мы всегда использовали GET-запросы — просили данные у сервера. Но HTTP поддерживает и другие методы для создания, обновления и удаления данных.
Пять основных методов
GET — получить данные
Самый частый метод. Данные передаются только в URL, тело запроса пустое.
import requests
# Получить список репозиториев
response = requests.get("https://api.github.com/user/repos", headers=headers)
Когда использовать: чтение, поиск, фильтрация — любое получение данных без изменений.
POST — создать ресурс
Создаёт новый объект. Данные передаются в теле запроса (request body) в формате JSON.
# Создать репозиторий
response = requests.post(
"https://api.github.com/user/repos",
headers=headers,
json={"name": "my-new-repo", "private": False} # ← тело запроса
)
# Успешный ответ: 201 Created
Когда использовать: создание нового пользователя, репозитория, issue, заказа.
PUT — заменить ресурс целиком
Заменяет объект полностью. Нужно передать все поля даже те которые не меняются.
# Обновить весь профиль пользователя
response = requests.put(
"https://api.example.com/users/42",
json={"name": "Артём", "email": "artem@example.com", "city": "Moscow"}
)
Когда использовать: полная замена объекта.
PATCH — изменить частично
Обновляет только переданные поля, остальные не трогает.
# Закрыть issue (изменить только поле state)
response = requests.patch(
"https://api.github.com/repos/user/repo/issues/5",
headers=headers,
json={"state": "closed"} # ← только изменяемое поле
)
Когда использовать: частичное обновление (изменить статус, одно поле).
DELETE — удалить ресурс
Удаляет объект. Тело запроса обычно пустое, успешный ответ — 204 No Content.
# Удалить репозиторий
response = requests.delete(
"https://api.github.com/repos/user/old-repo",
headers=headers
)
# Успешный ответ: 204 No Content
Когда использовать: удаление объектов.
Главное отличие GET от остальных
| GET | POST / PUT / PATCH / DELETE | |
|---|---|---|
| Данные | В URL (?key=val) |
В теле запроса (json={}) |
| Кэшируется | Да | Нет |
| Idempotent | Да | POST — нет; PUT/DELETE — да |
| В браузере | Адресная строка | Только через код / форму |
Idempotent — одинаковый результат при повторном вызове. GET список репозиториев пять раз — тот же список. POST «создать репо» пять раз — пять разных репозиториев (или ошибки дубликата).
params= vs json= в requests
# GET — данные в URL через params=
requests.get(url, params={"q": "python", "per_page": 10})
# Итоговый URL: url?q=python&per_page=10
# POST — данные в теле через json=
requests.post(url, json={"name": "my-repo", "private": True})
# URL без параметров, тело: {"name": "my-repo", "private": true}
json= автоматически:
- Сериализует словарь в JSON-строку
- Добавляет заголовок Content-Type: application/json
Статус-коды по методам
| Метод | Успешный код |
|---|---|
| GET | 200 OK |
| POST | 201 Created |
| PUT / PATCH | 200 OK |
| DELETE | 204 No Content |
CRUD — стандартный паттерн
REST API строится по принципу CRUD (Create, Read, Update, Delete):
| CRUD | HTTP-метод | Пример |
|---|---|---|
| Create | POST | Создать issue |
| Read | GET | Получить список issues |
| Update | PUT / PATCH | Закрыть issue |
| Delete | DELETE | Удалить issue |
💬 Comments (0)
No comments yet
Be the first to share your opinion about this article!