API — это способ для программ обмениваться данными: получить погоду, отправить сообщение, забрать список товаров, авторизовать пользователя. В Python для этого чаще всего используют requests и httpx.
Когда что выбирать
requests— простой и проверенный инструмент для синхронных HTTP-запросовhttpx— современная альтернатива с поддержкой иsync, иasync, плюс HTTP/2
1. Установка
pip install requests httpx2. Простой GET-запрос
import requests
response = requests.get("https://api.example.com/users")
print(response.status_code)
print(response.json())Что важно:status_code — код ответа сервераjson() — парсинг JSON в Python-словарьtext — если нужен обычный текст
3. Передача параметров
import requests
params = {"page": 1, "limit": 10}
response = requests.get("https://api.example.com/users", params=params)
print(response.url)
print(response.json())Python сам соберёт URL вида ?page=1&limit=10.
4. POST-запрос с JSON
import requests
data = {"name": "Ivan", "email": "ivan@example.com"}
response = requests.post("https://api.example.com/users", json=data)
print(response.status_code)
print(response.json())Используйте json=, а не data=, если API ожидает JSON. Это частый поисковый запрос и частая ошибка ⚠️
5. Заголовки и токен авторизации
import requests
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Accept": "application/json"
}
response = requests.get("https://api.example.com/profile", headers=headers)
print(response.json())6. Обработка ошибок
import requests
try:
response = requests.get("https://api.example.com/users", timeout=5)
response.raise_for_status()
data = response.json()
print(data)
except requests.exceptions.Timeout:
print("Таймаут запроса")
except requests.exceptions.HTTPError as e:
print(f"HTTP ошибка: {e}")
except requests.exceptions.RequestException as e:
print(f"Ошибка запроса: {e}")raise_for_status() полезен: сразу ловите 4xx/5xx, а не ищете баг позже 🛠️
7. Тот же запрос через httpx
import httpx
with httpx.Client(timeout=5.0) as client:
response = client.get("https://api.example.com/users")
response.raise_for_status()
print(response.json())8. Async с httpx
import httpx
import asyncio
async def main():
async with httpx.AsyncClient(timeout=5.0) as client:
response = await client.get("https://api.example.com/users")
response.raise_for_status()
print(response.json())
asyncio.run(main())Async полезен, когда нужно делать много запросов параллельно 🚀
Практические советы
всегда ставьте timeout
проверяйте status_code или вызывайте raise_for_status()
храните токены в переменных окружения, не в коде
используйте Session в requests или Client в httpx, если запросов много
читайте документацию API: endpoint, метод, формат данных, лимиты
Что чаще спрашивают
requests или httpx?
Для простых задач — requests. Для новых проектов и async — httpx.
Почему response.json() падает?
Сервер мог вернуть не JSON, а HTML с ошибкой или пустой ответ.
Как отправить form-data?
Используйте data= для форм и files= для файлов 📦
Работа с API в Python сводится к 4 шагам: отправить запрос, передать параметры/заголовки, проверить ответ, обработать ошибки. Для старта хватит requests, для масштабирования и асинхронности удобнее httpx.
👀 Ещё больше полезных материалов — в подборке каналов про IT.