KodySu.Client 1.0.1

dotnet add package KodySu.Client --version 1.0.1
                    
NuGet\Install-Package KodySu.Client -Version 1.0.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="KodySu.Client" Version="1.0.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="KodySu.Client" Version="1.0.1" />
                    
Directory.Packages.props
<PackageReference Include="KodySu.Client" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add KodySu.Client --version 1.0.1
                    
#r "nuget: KodySu.Client, 1.0.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package KodySu.Client@1.0.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=KodySu.Client&version=1.0.1
                    
Install as a Cake Addin
#tool nuget:?package=KodySu.Client&version=1.0.1
                    
Install as a Cake Tool

KodySu.Client

NuGet Version NuGet Downloads Build Status codecov License: MIT .NET GitHub release

Типобезопасный .NET клиент для работы с KodySu API v2.1 с поддержкой кеширования.

Особенности

  • Типобезопасность - используются strongly typed модели вместо магических строк
  • Надежность - политики повтора (retry), circuit breaker для обработки сбоев
  • HTTP-кеширование - прозрачное кеширование ответов API (10 минут TTL)
  • Мульти-таргетинг - поддержка .NET 6.0, 8.0 и 9.0
  • Логирование - структурированное логирование всех операций
  • Конфигурируемость - настройка через appsettings.json или код
  • DI интеграция - готовые расширения для ASP.NET Core

Установка

dotnet add package KodySu.Client

Быстрый старт

1. Регистрация в DI контейнере

// Базовый клиент без кеширования
services.AddKodySuClient(Configuration);

// Кешированный клиент (рекомендуется)
services.AddCachedKodySuClient(Configuration);

2. Конфигурация через appsettings.json

{
  "KodySuOptions": {
    "ApiKey": "your-api-key",
    "TimeoutSeconds": 30
  }
}

3. Использование

public class PhoneService
{
    private readonly IKodySuClient _kodySuClient;

    public PhoneService(IKodySuClient kodySuClient)
    {
        _kodySuClient = kodySuClient;
    }

    public async Task<string> GetOperatorAsync(string phoneNumber)
    {
        var result = await _kodySuClient.SearchPhoneAsync(phoneNumber);

        if (result?.Success == true)
        {
            return result.Operator ?? "Неизвестный оператор";
        }

        return "Номер не найден";
    }

    public async Task<IReadOnlyList<KodySuResult>> SearchMultipleAsync(
        IEnumerable<string> phoneNumbers)
    {
        return await _kodySuClient.SearchPhonesAsync(phoneNumbers);
    }
}

Структура проекта

├── IKodySuClient.cs                      # Интерфейс клиента
├── KodySuClientBase.cs                   # Базовый класс с общей функциональностью
├── KodySuClient.cs                       # Основная реализация HTTP клиента
├── CachedKodySuClient.cs                 # Реализация с HTTP-кэшированием
├── KodySuServiceCollectionExtensions.cs  # Регистрация в DI
├── KodySuClientOptions.cs                # Настройки клиента
├── KodySuHttpResponseHandler.cs          # Обработчик HTTP ответов
├── KodySuResult.cs                       # Модель результата поиска
├── KodySuSearchResponse.cs               # Модель ответа API
├── KodySuPhoneType.cs                    # Перечисление типов номеров
├── KodySuExceptions.cs                   # Исключения клиента
├── KodySuErrorCodes.cs                   # Коды ошибок API
└── PhoneNumber.cs                        # Модель телефонного номера

Конфигурация

Опции клиента

public class KodySuClientOptions : HttpClientOptions
{
    public string ApiKey { get; set; } = string.Empty;
    public int CacheExpiryMinutes { get; set; } = 60;

    // Унаследованные настройки:
    // public string BaseUrl { get; set; } = "https://www.kody.su";
    // public int TimeoutSeconds { get; set; } = 30;
    // public string UserAgent { get; set; } = "Planfact-KodySu-Client/1.0";
}

Расширенная конфигурация

{
  "KodySuOptions": {
    "ApiKey": "your-api-key",
    "BaseUrl": "https://www.kody.su",
    "TimeoutSeconds": 60,
    "UserAgent": "MyApp-KodySu-Client/1.0",
    "CacheExpiryMinutes": 60
  }
}

Модели данных

KodySuResult

public class KodySuResult
{
    public string PhoneNumber { get; set; }
    public bool Success { get; set; }
    public string? Operator { get; set; }
    public string? OperatorFull { get; set; }
    public string? Country { get; set; }
    public string? City { get; set; }
    public string? DefCode { get; set; }
    // ... другие свойства
}

Типы номеров

public enum KodySuPhoneType
{
    RussianMobile,
    RussianFixed,
    Other
}

Кеширование

Кешированный клиент (CachedKodySuClient) автоматически кеширует ответы API:

  • TTL: 10 минут (MediumTerm preset)
  • Размер кеша: 1,000 записей
  • Автоматическое управление: очистка старых записей
  • Прозрачность: кеширование на уровне HTTP ответов

Обработка ошибок

Клиент использует типизированные исключения для различных типов ошибок:

try
{
    var result = await _kodySuClient.SearchPhoneAsync("+79001234567");
}
catch (KodySuAuthenticationException ex)
{
    // Ошибки аутентификации (401, 403)
    Console.WriteLine($"Проблемы с API ключом: {ex.Message}");
}
catch (KodySuValidationException ex)
{
    // Ошибки валидации от API
    Console.WriteLine($"Ошибка валидации: {ex.ErrorCode} - {ex.Message}");
}
catch (KodySuHttpException ex)
{
    // Прочие HTTP ошибки
    Console.WriteLine($"HTTP ошибка: {ex.StatusCode}");
}

Автоматические политики надежности

  • Retry: автоматические повторы при транзиентных ошибках
  • Circuit Breaker: защита от каскадных сбоев
  • Rate Limiting: обработка ответов 429 (Too Many Requests)

Тестирование и покрытие кода

Проект имеет высокое покрытие unit тестами:

  • 58 unit тестов - полное покрытие основной функциональности
  • Кроссплатформенное тестирование - macOS, Ubuntu, Windows
  • Мокирование HTTP - тесты не зависят от внешних сервисов
  • Автоматическое покрытие - интеграция с Codecov

Запуск тестов локально

# Обычный запуск тестов
dotnet test

# Запуск с генерацией HTML отчета о покрытии
./coverage.sh

После выполнения ./coverage.sh откройте ./CoverageReport/index.html в браузере для просмотра детального отчета.

Лицензия

Этот проект лицензирован под MIT License.

Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.1 172 9/4/2025
1.0.0 163 8/29/2025