Что такое API простыми словами

Хороший бытовой пример — ресторан. Посетитель не заходит на кухню и не готовит блюдо сам, он делает заказ официанту по заранее понятному меню, а кухня возвращает готовое блюдо тем же путём обратно. API работает похоже: одна программа отправляет запрос по заранее описанному правилу, а другая программа обрабатывает его внутри себя и присылает готовый ответ, не раскрывая, как именно она устроена внутри.

API существуют для самых разных сервисов — курсов валют, карт, перевода текста, а не только погоды. Форма запроса и ответа почти всегда остаётся одним и тем же паттерном: адрес, параметры запроса, ответ в структурированном виде, обычно сегодня в формате JSON. Разобравшись один раз на примере погоды, тот же принцип легко переносится на любой другой открытый источник данных.

Как устроен HTTP-запрос к погодному сервису

Запрос строится из базового адреса сервиса, пути конкретного действия и параметров, которые дописывают после знака вопроса — например, название города, единицы измерения температуры и язык ответа. Для чтения данных без изменения чего-либо на сервере обычно используют метод GET, самый простой и самый частый тип запроса во всём вебе.

В Python для отправки такого запроса чаще всего берут библиотеку requests: функция requests.get принимает адрес и словарь параметров, сама собирает их в правильную строку запроса и отправляет по сети. Результат вызова — объект ответа, у которого есть код статуса и тело с данными, а не голый текст, который пришлось бы разбирать вручную по символам.

Ключ доступа и зачем он нужен

Ключ доступа сообщает сервису, какое именно приложение или аккаунт делает запрос. Через него сервис считает число обращений на аккаунт, включает или отключает функции по тарифу и блокирует чересчур активных отправителей запросов. Бесплатный ключ обычно выдают сразу после короткой регистрации по email на сайте выбранного погодного сервиса.

Способ передачи ключа зависит от конкретного сервиса: одни принимают его как обычный параметр запроса вместе с городом, другие требуют отдельный заголовок запроса. Правило в любом случае одно — ключ подставляют программно, а не вбивают вручную заново при каждом запуске скрипта.

Пошаговый пример получения погоды

Сначала регистрируются на сайте выбранного погодного сервиса и получают бесплатный ключ. Затем собирают адрес запроса из базового URL, названия нужного города и полученного ключа. Дальше запрос отправляют функцией requests.get, а в ответ приходит объект, у которого сначала стоит проверить код статуса и только потом доставать данные методом response.json.

  • зарегистрироваться на сайте погодного сервиса и получить бесплатный ключ доступа
  • собрать адрес запроса из базового URL сервиса, названия города и ключа
  • отправить GET-запрос библиотекой requests и получить объект ответа
  • проверить код ответа и достать данные методом response.json
  • обратиться к нужным полям словаря, например к температуре и влажности

Разбор JSON-ответа

Ответ погодного сервиса устроен как вложенный словарь. Внутри обычно есть раздел с основными показателями вроде температуры и влажности, список с текстовым описанием погоды наподобие переменной облачности, и раздел про ветер со скоростью и направлением. После вызова response.json нужное значение достают обычной индексацией по ключам, как у любого словаря Python.

Осторожность стоит проявить при обращении к конкретным полям: метод get у словаря с запасным значением по умолчанию безопаснее прямой индексации по квадратным скобкам. Если сервис по какой-то причине не прислал ожидаемое поле, прямая индексация оборвёт программу ошибкой отсутствующего ключа, а get просто вернёт запасное значение и позволит обработать ситуацию спокойно.

Обработка ошибок и лимитов

Код ответа сервиса сразу говорит, что произошло: 200 означает полный успех, 401 — неверный или отсутствующий ключ, 404 — сервис не нашёл такой город. Код 429 сигналит о превышении лимита запросов за период. Отдельно стоит ловить и сетевые ошибки вроде обрыва соединения или превышения времени ожидания — они случаются на уровне самого запроса, ещё до того, как сервис вообще успел ответить кодом статуса.

Бесплатные тарифы почти всегда ограничивают число запросов в сутки или в минуту, поэтому повторные запросы за одним и тем же городом имеет смысл кэшировать на несколько минут, а не дёргать сервис заново при каждом обращении пользователя. Полезная привычка — задавать таймаут у самого запроса, чтобы программа не зависала бесконечно, если сервис вдруг перестал отвечать.

Частые вопросы

Обязательно ли использовать библиотеку requests

Нет, в Python есть и встроенный модуль urllib, но requests заметно удобнее в повседневных задачах и остаётся самым распространённым выбором для работы с HTTP среди сторонних библиотек.

Что делать, если сервис вернул код 429

Это означает, что превышен лимит запросов за период. Правильная реакция — сделать паузу и повторить запрос позже, а не отправлять новые попытки подряд без остановки.

Нужно ли всегда регистрироваться, чтобы получить ключ

Почти всегда да: бесплатные ключи погодных и большинства других открытых API выдают именно после короткой регистрации по email, это стандартная практика учёта использования сервиса.

Можно ли получить данные вообще без ключа

Некоторые открытые источники действительно работают без ключа, но у популярных погодных сервисов это скорее исключение. Даже такие источники обычно ограничивают число запросов с одного адреса.