Исходный код вики Методы API


Последние авторы
1 (% class="lead" %)
2 Вопросы, связанные с работой методов API:
3
4 * {{showhide showmessage="Почему в ответах некоторых методов API возвращается свойство $type?" hidemessage="Почему в ответах некоторых методов API возвращается свойство $type?"}}|(% style="border-color:white" %)(((
5 (% class="box infomessage" %)
6 (((
7 **Примечание:** рекомендуется ознакомиться {{html}}<a href="https://docs.loymax.net/xwiki/bin/view/Main/General_information/Used_technologies/">со стеком технологий</a>{{/html}}, используемых системой Loymax.
8 )))
9
10 (((
11 Объекты, используемые во фреймворке **.Net**, переводятся из структуры данных в последовательность байтов или строку. В таком формате данные удобно передавать и хранить.
12
13 (% class="box" %)
14 (((
15 Процесс перевода состояния объекта в поток байтов с целью их сохранения в памяти ПК, в базе данных или файле называется **сериализацией**. Основное назначение сериализации — сохранение состояния объекта, чтобы в случае необходимости была возможность восстановить его.
16 Обратный перевод байтов в структуру данных называется **десериализцией**.
17 )))
18
19 Система Loymax для сериализации/десериализации использует сериализатор **Newtonsoft.Json.JsonSerializer**.
20 )))
21 )))|(% style="border-color:white" %){{lightbox image="Group 1 (1).png"/}}
22
23 Рассмотрим процесс сериализации/десериализации на примере работы метода для {{html}}<a href="https://docs.loymax.net/xwiki/bin/view/Main/Integration/Ways_to_use_API/API_methods/Methods_of_public_api/Brands/#H41F43E43B44344743543D43843544143F43844143A43043144043543D43443E432">получения списка брендов</a>{{/html}}.
24
25 (((
26
27 )))
28
29 |(% style="border-color:white" %)(((
30 Все бренды в Системе созданы по одному шаблону (модели), то есть наследуются от одного типа данных.
31
32 Алгоритм получения информации о брендах через методы API работает следующим образом:
33
34 1. Клиент отправляет запрос на получение списка брендов (##GET: /v1.2/brands##).
35 1. Сервер обрабатывает запрос, формирует и отправляет SQL-запрос в базу данных на получение списка брендов.
36 1. База данных в ответ на запрос сервера возвращает серверу список брендов, которые переводятся из потока байтов обратно в объект **.Net**.
37 1. Сервер возвращает клиенту список брендов в формате JSON. Сериализатор **Newtonsoft.Json.JsonSerializer **преобразует объект **.Net** в формат JSON.
38 )))|(% style="border-color:white" %)[[image:BrandBase.png]]
39
40 Например, в **.NET** есть типы **Brand1 **и **BrandBase **(**Brand1 **наследуется от **BrandBase**).
41
42 (% class="box" %)
43 (((
44 ##public class BrandBase
45 {
46 public string Name { get; set; }
47 public string Description { get; set; }
48 }
49 public class Brand1 : BrandBase
50 {
51 public string Code { get; set; }
52 }##
53 )))
54
55 **Newtonsoft JsonConvert** добавляет свойство **$type **в JSON схему для типов во время сериализации и использует его при десериализации.
56
57 Таким образом, при сериализации экземпляра класса **Brand1 **будет создан объект JSON с вышеупомянутым свойством **$type**.
58
59 (% class="box infomessage" %)
60 (((
61 **Brand1 **является объектом, созданными по типу **BrandBase**. Так как сериализатор ожидает получить только объект типа **BrandBase**, а **Brand1 **распознает как отдельный тип, который наследуются от общего типа **BrandBase**, то он присваивает ему свойство ##$type##, в котором указана модель, согласно которой был создан объект, чтобы при десериализации создать объект исходного типа.
62 )))
63
64 В ответе на запрос для получения списка брендов, информация о **Brand1 **будет выглядеть следующим образом:
65
66 (% class="box" %)
67 (((
68 ##{##
69
70 ## "$type": "Loymax.Api.Models.BrandInfo.Brand1, Loymax.Api",
71 "name": "Brand1",
72 "description": "Новый бренд",
73 "code": "7878b563333841d79a5e5d14fde29cbe"
74 }##
75 ))){{/showhide}}