До этого модуля все инструменты работали с тем, что было доступно локально: считали по формулам, брали системное время, разбирали переданную строку. Такой инструмент нельзя сломать извне — он зависит только от вашего кода. С этого модуля инструмент начинает ходить в интернет, и вместе с полезностью появляется целый набор новых причин, по которым он может подвести пользователя.
Технически шаг небольшой: внутри функции появляется HTTP-запрос, одна строка. По последствиям это переход в другой класс задач. Инструмент перестаёт быть чистой функцией: он становится медленным, непредсказуемым и зависимым от чужого сервиса, которым вы не управляете. Модуль посвящён тому, как написать такой инструмент, чтобы он оставался полезным, даже когда чужая сторона не отвечает.
Работать будем с открытым метеосервисом Open-Meteo: он не требует ни ключа, ни регистрации, отдаёт понятный JSON и дополнительно предоставляет геокодер — справочник, который переводит название города в координаты. Обращаться будем к его учебной копии на сервере академии: она повторяет пути и форму ответов настоящего сервиса, но работает в России и поэтому доступна из сети колледжа, где иностранные сервисы бывают закрыты. Никаких платных сервисов и никаких ключей в коде в этом курсе не будет: работу с секретами разбирает модуль 9, и до тех пор мы намеренно берём только то, что доступно всем.
Три темы мы здесь рассматривать не будем, чтобы не размывать материал. Проверку аргументов средствами Pydantic и продуманные формулировки сообщений разбирает модуль 7. Хранение полученных данных в базе — модуль 8. Секреты, квоты и защита от злоупотреблений как отдельная тема безопасности — модуль 9. Здесь нас интересует одно: как выглядит инструмент, который зависит от сети, и что делать с его отказами.