Получение свойств понятий
Алгоритм
- Выбор хранилища для подключения;
- Получение токена авторизации;
- Выбор понятия;
- Выбор свойства понятия;
- Запись ответа в файл.
Реализация получения свойств объекта в коде
Пример обращения к web-серверу, получения и обработки результата реализован в проекте GetMeasureUnit, написанном на языке C# в среде .NET версии 6.0.29.
Взаимодействие с сервером осуществляется через объект класса HttpClient.
Авторизация
Необходимо пройти стандартную процедуру авторизации требуемого пользователя в выбранном хранилище.
Варианты авторизации:
- Авторизация с использованием командной строки;
- Авторизация с использованием Swagger;
- Авторизация в C# .NET.
Получение списка понятий
Получение списка понятий осуществляется через GET-запрос по адресу /concept. Для получения всех доступных понятий никакие дополнительные параметры запросу не требуются.
var conceptUriBuilder = new UriBuilder(client.BaseAddress!)
{
Path = "api/v1/concept"
};
var responseConcepts = await client.GetAsync(conceptUriBuilder.Uri);
responseConcepts.EnsureSuccessStatusCode();
var concepts = await responseConcepts.Content.ReadFromJsonAsync<PaginatedList<Concept>>();
Здесь в качестве ответа возвращается объект класса PaginatedList, пригодный для отображения больших списков постранично.
Выбор понятия
Понятие выбирается через фильтрацию списка по вводимому пользователем названию.
var conceptName = Console.ReadLine();
var concept = concepts!.Items.FirstOrDefault(c => c.Name == conceptName);
var conceptId = concept!.ObjectId;
Получение списка свойств понятия
Получение списка понятий осуществляется через GET-запрос по адресу /concept-property-source. В качестве дополнительного параметра передается идентификатор ранее выбранного понятия conceptId.
var conceptPropertySourcesUriBuilder = new UriBuilder(client.BaseAddress!)
{
Path = "api/v1/concept-property-source",
Query = $"conceptId={conceptId}"
};
var responseConceptPropertySources = await client.GetAsync(conceptPropertySourcesUriBuilder.Uri);
responseConceptPropertySources.EnsureSuccessStatusCode();
var conceptPropertySources = await responseConceptPropertySources.Content.ReadFromJsonAsync<IReadOnlyList<ConceptPropertySource>>();
Выбор свойства понятия
Выбор свойства понятия для дальнейшей работы осуществляется по его идентификатору.
Console.WriteLine(string.Join("\n", conceptPropertySources!.Select(c => c.ObjectId)));
int conceptPropertySourceId = int.Parse(Console.ReadLine()!);
Получение информации о свойстве понятия
Информацию о свойстве понятия можно получить, выполнив GET-запрос по адресу /concept-property-source/by-id. В качестве дополнительных параметров запроса нужно передать идентификатор понятия.
var conceptPropertySourceUriBuilder = new UriBuilder(client.BaseAddress!)
{
Path = "api/v1/concept-property-source/by-id",
Query = $"conceptPropertySourceId={conceptPropertySourceId}"
};
var responseConceptPropertySource = await client.GetAsync(conceptPropertySourceUriBuilder.Uri);
responseConceptPropertySource.EnsureSuccessStatusCode();
var conceptPropertySource = await responseConceptPropertySource.Content.ReadFromJsonAsync<ConceptPropertySource>();
С полученным объектом класса ConceptPropertySource можно работать стандартными средствами C#.
Выход из сессии
Выход осуществляется через выполнение POST-запроса по адресу "/login/sign-out".
var content = JsonContent.Create(new
{
ClientType = clientType,
});
var response = await httpClient.PostAsync("api/v1/login/sign-out", content, cancellationToken);
response.EnsureSuccessStatusCode();