Краткая справочная документация по публичному API Weather SDK.
Главный фасад для работы с SDK.
public class WeatherSDK {
// Конструктор
public WeatherSDK(SDKConfig config)
// Получить погоду
public WeatherData getWeather(String city)
// Polling mode: регистрация локаций
public void registerLocation(String city)
public void unregisterLocation(String city)
public Set<String> getRegisteredLocations()
public void refreshAll()
// Управление кэшем
public CacheInfo getCacheInfo()
public void clearCache()
// Завершение работы
public void shutdown()
}Конфигурация SDK (Builder pattern).
public record SDKConfig(...) {
// Builder
public static Builder builder(String apiKey)
public static class Builder {
public Builder operationMode(OperationMode mode)
public Builder cacheMaxSize(int size) // default: 100
public Builder cacheTtlMinutes(int minutes) // default: 10
public Builder pollingIntervalMinutes(int minutes) // default: 5
public Builder maxRetries(int retries) // default: 3
public SDKConfig build()
}
}Multiton для управления множественными экземплярами.
public class WeatherSDKFactory {
public static WeatherSDK getInstance(String apiKey, SDKConfig config)
public static WeatherSDK getInstance(String apiKey)
public static void shutdown(String apiKey)
public static void shutdownAll()
public static int getInstanceCount()
}public record WeatherData(
Weather weather,
Temperature temperature,
Integer visibility,
Wind wind,
Long datetime,
Sys sys,
Integer timezone,
String name
) { }public record Temperature(
Double temp, // °C
Double feelsLike // °C
) { }public record Weather(
String main, // "Rain", "Clouds"
String description // "light rain"
) { }public record Wind(
Double speed // m/s
) { }public record Sys(
Long sunrise, // Unix timestamp
Long sunset // Unix timestamp
) { }public record CacheInfo(
Set<String> cachedCities,
int currentSize,
int maxSize
) {
public boolean isFull()
public boolean isEmpty()
public double getUtilization() // 0.0-1.0
}public enum OperationMode {
ON_DEMAND, // Получение по запросу
POLLING // Автоматические обновления
}Все исключения наследуются от WeatherSDKException.
WeatherSDKException
├── ApiException
│ ├── InvalidApiKeyException (401)
│ ├── CityNotFoundException (404)
│ ├── RateLimitException (429)
│ └── ApiUnavailableException (5xx)
├── ValidationException
├── CacheException
└── ConfigurationException
try {
WeatherData weather = sdk.getWeather("London");
} catch (InvalidApiKeyException e) {
// Неверный API ключ
} catch (CityNotFoundException e) {
// Город не найден
String city = e.getCityName();
} catch (RateLimitException e) {
// Превышен rate limit - подождать
} catch (ApiUnavailableException e) {
// API недоступен - повторить позже
} catch (ValidationException e) {
// Невалидные данные
} catch (WeatherSDKException e) {
// Общая ошибка SDK
}SDKConfig config = SDKConfig.builder("api-key")
.operationMode(OperationMode.ON_DEMAND)
.cacheMaxSize(100)
.cacheTtlMinutes(10)
.build();
WeatherSDK sdk = new WeatherSDK(config);
try {
WeatherData weather = sdk.getWeather("London");
System.out.println(weather.temperature().temp() + "°C");
} finally {
sdk.shutdown();
}SDKConfig config = SDKConfig.builder("api-key")
.operationMode(OperationMode.POLLING)
.pollingIntervalMinutes(5)
.build();
WeatherSDK sdk = new WeatherSDK(config);
try {
sdk.registerLocation("London");
sdk.registerLocation("Paris");
Thread.sleep(2000); // Дождаться первого обновления
WeatherData weather = sdk.getWeather("London");
System.out.println(weather.temperature().temp() + "°C");
} finally {
sdk.shutdown();
}SDKConfig config1 = SDKConfig.builder("key1").build();
SDKConfig config2 = SDKConfig.builder("key2").build();
WeatherSDK sdk1 = WeatherSDKFactory.getInstance("key1", config1);
WeatherSDK sdk2 = WeatherSDKFactory.getInstance("key2", config2);
// Использование...
WeatherSDKFactory.shutdownAll();| Параметр | Значение по умолчанию |
|---|---|
| Cache max size | 100 |
| Cache TTL | 10 минут |
| Polling interval | 5 минут |
| Max retries | 3 |
| Operation mode | ON_DEMAND |
- Вызовов в минуту: 60
- Вызовов в месяц: 1,000,000
- Максимальный размер: Настраивается (default: 100)
- TTL: Настраивается (default: 10 минут)
- Алгоритм: LRU (Least Recently Used)
Все публичные методы SDK являются thread-safe и могут безопасно использоваться из множественных потоков.
SDK использует SLF4J для логирования. Настройте logback.xml для управления уровнями:
<logger name="com.kameleoon.weather" level="INFO"/>Доступные уровни:
- DEBUG: Детальная информация (cache hits/misses, API calls)
- INFO: Важные события (SDK start/stop, polling)
- WARN: Предупреждения (retries, expired cache)
- ERROR: Ошибки (API failures, exceptions)
- Всегда вызывайте shutdown() при завершении работы с SDK
- Используйте try-finally или try-with-resources
- Переиспользуйте SDK instance вместо создания новых
- Обрабатывайте специфичные исключения для разной логики
- Мониторьте CacheInfo для оптимизации размера кэша
- В POLLING режиме используйте достаточный интервал (не менее 5 минут)
Автор: Шульдешов Юрий Леонидович
Telegram: @shuldeshoff
Версия: 1.0.0