Исходный код вики Методы API
Скрыть последних авторов
author | version | line-number | content |
---|---|---|---|
![]() |
2.1 | 1 | (% class="lead" %) |
![]() |
40.1 | 2 | Вопросы, связанные с работой методов API: |
![]() |
6.2 | 3 | |
![]() |
41.1 | 4 | * {{showhide showmessage="Почему в ответах некоторых методов API возвращается свойство $type?" hidemessage="Почему в ответах некоторых методов API возвращается свойство $type?"}}|(% style="border-color:white" %)((( |
![]() |
28.2 | 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 | ))) | ||
![]() |
6.2 | 9 | |
![]() |
28.2 | 10 | ((( |
![]() |
32.2 | 11 | Объекты, используемые во фреймворке **.Net**, переводятся из структуры данных в последовательность байтов или строку. В таком формате данные удобно передавать и хранить. |
![]() |
7.1 | 12 | |
![]() |
28.2 | 13 | (% class="box" %) |
14 | ((( | ||
![]() |
36.1 | 15 | Процесс перевода состояния объекта в поток байтов с целью их сохранения в памяти ПК, в базе данных или файле называется **сериализацией**. Основное назначение сериализации — сохранение состояния объекта, чтобы в случае необходимости была возможность восстановить его. |
![]() |
28.2 | 16 | Обратный перевод байтов в структуру данных называется **десериализцией**. |
17 | ))) | ||
18 | |||
![]() |
37.1 | 19 | Система Loymax для сериализации/десериализации использует сериализатор **Newtonsoft.Json.JsonSerializer**. |
![]() |
29.1 | 20 | ))) |
![]() |
43.1 | 21 | )))|(% style="border-color:white" %){{lightbox image="Group 1 (1).png"/}} |
![]() |
28.2 | 22 | |
![]() |
43.1 | 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}}. |
![]() |
28.2 | 24 | |
![]() |
43.1 | 25 | ((( |
26 | |||
27 | ))) | ||
28 | |||
29 | |(% style="border-color:white" %)((( | ||
![]() |
35.1 | 30 | Все бренды в Системе созданы по одному шаблону (модели), то есть наследуются от одного типа данных. |
![]() |
28.2 | 31 | |
|
48.1 | 32 | Алгоритм получения информации о брендах через методы API работает следующим образом: |
![]() |
35.1 | 33 | |
![]() |
28.5 | 34 | 1. Клиент отправляет запрос на получение списка брендов (##GET: /v1.2/brands##). |
35 | 1. Сервер обрабатывает запрос, формирует и отправляет SQL-запрос в базу данных на получение списка брендов. | ||
![]() |
43.1 | 36 | 1. База данных в ответ на запрос сервера возвращает серверу список брендов, которые переводятся из потока байтов обратно в объект **.Net**. |
37 | 1. Сервер возвращает клиенту список брендов в формате JSON. Сериализатор **Newtonsoft.Json.JsonSerializer **преобразует объект **.Net** в формат JSON. | ||
38 | )))|(% style="border-color:white" %)[[image:BrandBase.png]] | ||
![]() |
28.2 | 39 | |
![]() |
43.1 | 40 | Например, в **.NET** есть типы **Brand1 **и **BrandBase **(**Brand1 **наследуется от **BrandBase**). |
![]() |
7.1 | 41 | |
42 | (% class="box" %) | ||
43 | ((( | ||
![]() |
43.1 | 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; } | ||
![]() |
28.3 | 52 | }## |
![]() |
43.1 | 53 | ))) |
![]() |
17.1 | 54 | |
![]() |
43.1 | 55 | **Newtonsoft JsonConvert** добавляет свойство **$type **в JSON схему для типов во время сериализации и использует его при десериализации. |
![]() |
20.1 | 56 | |
![]() |
43.1 | 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}} |