Table of Contents

Получение свойств понятий

Алгоритм

  • Выбор хранилища для подключения;
  • Получение токена авторизации;
  • Выбор понятия;
  • Выбор свойства понятия;
  • Запись ответа в файл.

Реализация получения свойств объекта в коде

Пример обращения к web-серверу, получения и обработки результата реализован в проекте GetMeasureUnit, написанном на языке C# в среде .NET версии 6.0.29.

Взаимодействие с сервером осуществляется через объект класса HttpClient.

Авторизация

Необходимо пройти стандартную процедуру авторизации требуемого пользователя в выбранном хранилище.

Варианты авторизации:

Получение списка понятий

Получение списка понятий осуществляется через 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();