Миграция на клиентскую библиотеку Ascon.Polynom.Web.Api.Client
Статья описывает переход со старой библиотеки структур данных веб-сервера
Ascon.Polynom.Web.Api.Data на клиентскую библиотеку Ascon.Polynom.Web.Api.Client,
поставляемую NuGet-пакетом. Клиентская библиотека объединяет модели запросов и ответов,
типизированные сервисы вызова методов API и встроенную инфраструктуру авторизации.
Кому адресовано
Потребителям web-API, которые:
- ссылались на сборку
Ascon.Polynom.Web.Api.Dataчерез<Reference>или<ProjectReference>; - использовали модели и интерфейсы из пространств имён
Ascon.Polynom.Web.Api.Data.*; - вызывали методы web-API вручную через
HttpClientи сами подставляли заголовокAuthorization: Bearer.
Что изменилось
| Область | Было (Ascon.Polynom.Web.Api.Data) |
Стало (Ascon.Polynom.Web.Api.Client) |
|---|---|---|
| Подключение | <Reference> / <ProjectReference> на сборку продукта |
одна PackageReference на пакет Ascon.Polynom.Web.Api.Client |
| Пространство имён | Ascon.Polynom.Web.Api.Data.* |
Ascon.Polynom.Web.Api.Client.* |
| Интерфейсы моделей | Ascon.Polynom.Web.Api.Data.Interfaces.Models.*, .Interfaces.Requests.*, .Interfaces.Responses.* |
Ascon.Polynom.Web.Api.Client.Interfaces |
| Классы моделей | Ascon.Polynom.Web.Api.Data.Models.*, .Requests.*, .Responses.* |
Ascon.Polynom.Web.Api.Client.Models |
| Перечисления | Ascon.Polynom.Web.Api.Data.Interfaces.Enums |
Ascon.Polynom.Web.Api.Client.Enums |
| Вызов методов API | ручной HttpClient и строки маршрутов |
типизированные сервисы Ascon.Polynom.Web.Api.Client.Services.*ApiClient |
| Авторизация | ручная подстановка Authorization: Bearer |
AuthorizationService, AuthorizationMessageHandler, AddPolynomApiClient |
| JSON | локальные настройки сериализации | Ascon.Polynom.Web.Api.Client.Json.PolynomJsonOptions |
| Частично заданные значения | Optional<T> |
Ascon.Polynom.Web.Api.Client.Optional<T> |
Полное описание состава библиотеки, установки, настройки авторизации и списка сервисов приведено в разделе Клиентская библиотека .NET.
Краткое описание миграции
Подключение библиотеки. Уберите ссылки на сборку
Ascon.Polynom.Web.Api.Dataи добавьте ссылку на NuGet-пакет клиентской библиотеки:<ItemGroup> <PackageReference Include="Ascon.Polynom.Web.Api.Client" Version="24.1.*" /> </ItemGroup>Пространства имён. В директивах
usingзамените префиксAscon.Polynom.Web.Api.DataнаAscon.Polynom.Web.Api.Client. Интерфейсы моделей теперь находятся вAscon.Polynom.Web.Api.Client.Interfaces, классы — вAscon.Polynom.Web.Api.Client.Models, перечисления — вAscon.Polynom.Web.Api.Client.Enums.Вызовы методов API. Вместо ручных HTTP-запросов используйте типизированные сервисы
*ApiClientизAscon.Polynom.Web.Api.Client.Services. Сервисы возвращаютTask<T?>и принимаютCancellationToken:using Ascon.Polynom.Web.Api.Client.Models; using Ascon.Polynom.Web.Api.Client.Services; var page = await searchApiClient.ExecuteSearch( new SearchRequest { SearchText = "насос", PageNumber = 1, PageSize = 50 }, cancellationToken);Авторизация. Управление сессией выполняет
AuthorizationService. В приложениях с DI сервисы регистрируются расширениемAddPolynomApiClient, в консольных сценариях без DI — фабрикойPolynomApiClientFactory. ОбработчикAuthorizationMessageHandlerсам подставляет заголовокAuthorization: Bearerи при ответе401однократно обновляет токен:builder.Services.AddPolynomApiClient(options => { options.BaseAddress = new Uri("https://polynom-mdm.local:5100"); options.AutoRefreshToken = true; });Сериализация. Для ручной сериализации моделей используйте единые настройки
PolynomJsonOptions.Optionsвместо собственных.
Критические изменения (Breaking Changes)
- Пространства имён
Ascon.Polynom.Web.Api.Data.*заменены наAscon.Polynom.Web.Api.Client.*— требуется правка директивusing. - Интерфейсы моделей объединены в одном пространстве имён
Ascon.Polynom.Web.Api.Client.Interfaces(ранее — отдельные.Interfaces.Models,.Interfaces.Requests,.Interfaces.Responses). - Классы моделей запросов и ответов перенесены в
Ascon.Polynom.Web.Api.Client.Models(ранее — раздельные.Models,.Requests,.Responses). - Подключение сборки продукта заменено на NuGet-пакет; прямые ссылки на DLL продукта не поддерживаются.
- Вызовы API и авторизация выполняются через сервисы библиотеки — ручной
HttpClient, строки маршрутов и ручная подстановка заголовка авторизации не требуются.
Рекомендации по миграции
- Замените
<Reference>/<ProjectReference>на<PackageReference Include="Ascon.Polynom.Web.Api.Client" />. - Выполните глобальную замену
Ascon.Polynom.Web.Api.Data→Ascon.Polynom.Web.Api.Clientв директивахusingи уточните пространства имён для моделей, интерфейсов и перечислений. - Переведите обращения к web-API на типизированные сервисы
*ApiClient; перенесите тела запросов в моделиAscon.Polynom.Web.Api.Client.Models. - Настройте авторизацию через
AddPolynomApiClient(DI) илиPolynomApiClientFactory(без DI) и уберите ручную работу с токенами. - Сверьте фактическое расположение конкретных типов по справочнику Клиентская библиотека .NET — имена и вложенность пространств имён могли измениться.
- Соберите приложение и проверьте авторизацию и вызовы методов по неинтерактивному сценарию.
Возможные ошибки
| Симптом | Причина | Решение |
|---|---|---|
Тип не найден после замены using |
тип остался в другом пространстве имён новой библиотеки | проверьте Ascon.Polynom.Web.Api.Client.Interfaces, .Models или .Enums |
| Ошибка восстановления пакета | не подключён NuGet-фид с пакетом | подключите фид с Ascon.Polynom.Web.Api.Client (в SDK доступен локальный фид SDK/Web/Packages/dotnet) |
401 при вызове метода |
не выполнена авторизация или не настроен обработчик | вызовите AuthorizationService.SignInAsync(...) и используйте клиенты из AddPolynomApiClient/PolynomApiClientFactory |
| Токен не подставляется в запрос | HttpClient создан в обход библиотеки |
получайте клиенты из DI или фабрики, а не создавайте HttpClient вручную |
| Значение поля теряется при обновлении | используется null вместо незаданного значения |
применяйте Ascon.Polynom.Web.Api.Client.Optional<T> |