📝 API

HTTP-статус-коды: что сервер говорит твоей программе

P
Автор
PyLand Team
📅
Опубликовано
08.05.2026
⏱️
Время чтения
2 мин
👁️
Просмотров
429
🌱
Уровень
Начальный

Каждый раз когда твоя программа делает запрос к API, сервер отвечает не только данными — он отвечает статус-кодом. Это трёхзначное число которое говорит: «всё хорошо», «такого нет», «нет доступа» или «я сломался».

Структура статус-кода

Статус-коды разбиты по группам:

Диапазон Значение
1xx Информационные (редко видишь)
2xx Успех ✅
3xx Перенаправление
4xx Ошибка на стороне клиента (твоя ошибка)
5xx Ошибка на стороне сервера

Самые важные коды

200 OK

Всё хорошо. Запрос выполнен, данные получены.

response = requests.get("https://api.chucknorris.io/jokes/random")
print(response.status_code)  # 200

201 Created

Ресурс успешно создан. Получаешь в ответ на POST-запрос (создание репозитория, публикация статьи).

204 No Content

Успех, но тело ответа пустое. Например при удалении записи.


400 Bad Request

Неверный запрос — сервер не понял что ты хочешь. Например передал неверный параметр.

{"cod": "400", "message": "bad request"}

401 Unauthorized

Не авторизован. Нет или неверный API-ключ.

{"cod": 401, "message": "Invalid API key"}

403 Forbidden

Авторизован, но нет прав. Например пытаешься изменить чужой репозиторий.

404 Not Found

Не найдено. Неверный URL или запрашиваемый объект не существует.

{"cod": "404", "message": "city not found"}

422 Unprocessable Entity

Синтаксис запроса правильный, но данные некорректны (например дата в неверном формате).

429 Too Many Requests

Превышен лимит запросов. Подожди и попробуй снова.


500 Internal Server Error

Сервер сломался. Это не твоя ошибка — проблема на стороне сервиса.

502 Bad Gateway / 503 Service Unavailable

Сервер временно недоступен. Попробуй позже.

Как работать со статус-кодами в Python

Способ 1 — проверка вручную

response = requests.get(url, params=params)

if response.status_code == 200:
    data = response.json()
elif response.status_code == 404:
    print("Не найдено")
elif response.status_code == 401:
    print("Неверный ключ")

Способ 2 — raise_for_status()

Метод raise_for_status() автоматически бросает HTTPError если код >= 400:

try:
    response = requests.get(url, params=params)
    response.raise_for_status()  # ← выбросит ошибку при 4xx или 5xx
    data = response.json()
except requests.exceptions.HTTPError as e:
    print(f"Ошибка: {e.response.status_code}")

Способ 2 лаконичнее и идиоматичнее — используй его в production-коде.

Правило 4xx vs 5xx

  • 4xx — ты что-то сделал не так. Исправляй запрос.
  • 5xx — сервер что-то сделал не так. Жди или сообщи в поддержку.

Практика: смотрим коды в браузере

  1. Открой DevTools (F12) → вкладка Network
  2. Перейди на любой сайт
  3. Кликни на любой запрос
  4. В разделе Headers найди Status Code

Ты увидишь 200 для успешных ресурсов, 304 (Not Modified, из кэша) для ресурсов которые не изменились.

Ваша реакция на статью

💬 Комментарии (0)

🔐 Войдите в систему, чтобы оставить комментарий
🚪 Войти
💭

Комментариев пока нет

Станьте первым, кто поделится мнением об этой статье!

🔗 Похожие

Похожие статьи

Продолжите изучение с этими материалами

📝

Безопасная загрузка файлов: размер, тип, имя и хр…

Когда пользователь выбирает фотографию, всё выглядит просто: браузер отправляет файл, а сервер сохраняет его. Но...

📅 18.09.2026 👁️ 99
📝

S3-совместимое объектное хранилище: bucket, key и…

На одном компьютере файл можно сохранить в обычную папку. После деплоя это ненадёжно: контейнер могут...

📅 18.09.2026 👁️ 90
📝

Cookie-сессии и CSRF в серверном веб-приложении

Cookie-сессия связывает запросы браузера с пользователем. В подписанной cookie данные защищены от незаметного изменения, но...

📅 18.09.2026 👁️ 106
🎓 Продолжить обучение

В каких курсах используется этот материал

Перейдите к курсу, чтобы закрепить материал на практике.

FastAPI: от первого маршрута до AI-сайта Открыть программу курса API на практике: взаимодействие с любыми сервисами Открыть программу курса