Методы API
Вопросы, связанные с работой методов API:
Почему в ответах некоторых методов API возвращается свойство $type?
Объекты, используемые во фреймворке .Net, переводятся из структуры данных в последовательность байтов или строку. В таком формате данные удобно передавать и хранить. Процесс перевода состояния объекта в поток байтов с целью их сохранения в памяти ПК, в базе данных или файле называется сериализацией. Основное назначение сериализации — сохранение состояния объекта, чтобы в случае необходимости была возможность восстановить его. Система Loymax для сериализации/десериализации использует сериализатор Newtonsoft.Json.JsonSerializer. |
Рассмотрим процесс сериализации/десериализации на примере работы метода для получения списка брендов.
Все бренды в Системе созданы по одному шаблону (модели), то есть наследуются от одного типа данных.
Например:
- Существует тип BrandBase.
- Пользователь создал бренды: Brand1 и Brand2.
- Brand1 и Brand2 наследуют все свойства типа BrandBase.
- Так как бренды являются объектами .Net, они переводятся в поток байтов для хранения в базе данных.
Алгоритм получения информации о брендах через методы API работает следующим образом:
- Клиент отправляет запрос на получение списка брендов (GET: /v1.2/brands).
- Сервер обрабатывает запрос, формирует и отправляет SQL-запрос в базу данных на получение списка брендов.
- База данных в ответ на запрос сервера возвращает серверу список брендов, которые переводятся из потока байтов обратно в объект .Net.
- Сервер возвращает клиенту список брендов в формате JSON:
- Сериализатор Newtonsoft.Json.JsonSerializer преобразует объект .Net в формат JSON.
- Brand1 и Brand2 являются объектами, созданными по типу BrandBase. Так как сериализатор ожидает получить только объект типа BrandBase, а Brand1 и Brand2 распознает как отдельные типы, которые наследуются от общего типа BrandBase, то он присваивает им свойство $type, в котором указана модель, согласно которой был создан объект, чтобы при десериализации создать объект исходного типа.
Таким образом, в ответе на запрос для получения списка брендов, информация о Brand1 будет выглядеть следующим образом:
{
"$type": "Loymax.Api.Models.BrandInfo.BrandBase, Loymax.Api",
"id": 111222,
"guid": "00000000-0000-0000-0000-000000000000",
"code": "7878b563333841d79a5e5d14fde29cbe",
"order": 0,
"state": "Normal",
"uid": "10e6c953-132d-441b-8ecb-1525b2d06e10",
"name": "Brand1",
"description": "Новый бренд",
"fullDescription": null,
"url": null,
"images": []
}