Профессиональное CLI-приложение с интеграцией Open-Meteo API: геокодинг, REST-запросы, умный кэш с TTL, интерактивный интерфейс с ANSI-цветами и graceful error handling.
Войдите, чтобы начать проектВы работаете в стартапе, который строит платформу агрегации данных из множества источников: финансовые показатели, новости, погода, курсы валют. Платформа объединяет эти данные и предоставляет клиентам через единый API. Тимлид поручает вам первую задачу: интегрировать погодный API.
«Начнём с простого, — говорит он. — Погодные API отлично подходят для обучения: есть геокодинг (город → координаты), временные ряды данных, нужно кэшировать, чтобы не убить лимиты. Построй CLI-прототип, покажи, как это делается правильно. Если всё сделаешь хорошо, твой код станет примером для интеграции остальных сервисов».
Команда выбрала Open-Meteo — открытый API без ключей и лимитов, с глобальным покрытием и встроенным геокодингом. Возможно, вы видели знаменитый wttr.in (curl wttr.in возвращает ASCII-прогноз), но это веб-сервис. Вы построите полноценное клиентское приложение на Go с локальным кэшем, сохранением настроек и интерактивным интерфейсом.
Ваш инструмент должен:
Это не просто «утилита для погоды». Это полигон для освоения интеграции внешних API. Каждое современное приложение работает с внешними сервисами: платёжные системы (Stripe), карты (Google Maps), курсы валют, новостные агрегаторы. Здесь вы научитесь делать это профессионально: с таймаутами и retry-логикой для устойчивости к сбоям, с умным кэшированием для экономии лимитов, с чистой архитектурой для лёгкой замены провайдеров. Если справитесь, ваши паттерны (адаптеры, exponential backoff, TTL-кэш, error handling) станут стандартом для всей платформы.
Вы создадите профессиональное CLI-приложение для просмотра погоды, которое интегрируется с Open-Meteo API (Forecast + Geocoding). Приложение будет демонстрировать best practices работы с внешними сервисами: корректные HTTP-запросы с таймаутами и retry-логикой, умное кэширование с TTL для экономии запросов, чистую архитектуру с разделением ответственности между слоями, интерактивный пользовательский интерфейс с понятной обработкой ошибок.
Это не просто учебная задача — вы построите реальный инструмент, которым сами будете пользоваться, и освоите паттерны, применимые к любой интеграции внешних API в production-системах.
context.Context.