Примеры работы с API ODANT

Простое получение данных

https://demo.odant.org/api/H:1D3F682140A5840/P:WORK/B:1D40ECE5ADC0ED0/C:1D394FB232473D0/I:Pack?ssid=A53DBD1513F589C4A39769EF92BCC3BF&format=xml-standart

Это URL GET-запроса для получения данных. Разберем по частям.

  • demo.odant.org — адрес сервера.
  • H:1D3F682140A5840/P:WORK/B:1D40ECE5ADC0ED0/C:1D394FB232473D0/I:Pack — идентификатор Item’а (H – хост, P:WORK — домен, B — база (организация), C — класс, I:Pack – индекс, содержащий все данные в необработанном виде).
  • ssid — идентификатор сессии пользователя.
  • format — формат вывода данных (если не указывать, будет выдан JSON).

Общий вид GET-запроса:

https://demo.odant.org/api/<WebFullId>/I:Pack?ssid=<SSID>&format=xml-standart
Получить WebID можно, например, в Windows-клиенте, через пункт «Инфо» контекстного меню класса. В рамках описанных примеров предполагаем, что SSID тоже берется оттуда, то есть, тему авторизации не затрагиваем.

Получение структуры данных

Используется GET-запрос следующего вида. Здесь WebFullID — идентификатор контекста (например, хоста, базы, класса).

https://demo.odant.org/api/<WebFullId>?method=get_config&ssid=<SSID>&format=xml-standart

В этом примере элементы D — домены (базы, рабочие места, модули), C — классы. Используются атрибуты:

  • i — идентификатор;
  • n — имя;
  • l — отображаемая метка;
  • t — тип;
  • a — уровень доступа.

Создание класса

Используется POST-запрос следующего вида. WebFullID — идентификатор контекста, где необходимо создать класс.

https://demo.odant.org/api/<WebFullId>?method=create_class&ssid=<SSID>&format=xml-standart

В качестве тела запроса используем XML:

<CLASS Name="Api Test Creation" Label="Тестирование создания через API">
  <METADATA>
	<ATTR Name="name" Label="Наименование" Type="Строка"/>
	<ATTR Name="date" Label="Дата" Type="ДатаВремя"/>
	<ATTR Name="Count" Label="Количество" Type="Число"/>
	<ATTR Name="Сотрудник" Label="Сотрудник" Type="H:1D3F682140A5840/D:WORK/D:1D40ECE5ADC0ED0/C:1D394FB2EC64BF0"/>
  </METADATA>
</CLASS>

Name и Label – это имя и метка класса. Поля указываются в элементе METADATA, в котором создаются элементы ATTR для каждого поля. Можно указать имя (Name), метку (Label), тип (Type) поля. В качестве типа можно указать идентификатор класса.

Ответ на отправленный запрос и созданный класс:

<C a="6" i="1D41422E0BB9B70" n="Api Test Creation" l="Тестирование создания через API"/>

Получение данных по XQuery-запросу

Для выполнения XQuery-запроса к данным класса используется такой POST-запрос:

https://demo.odant.org/api/<WebFullId>/I:Pack?method=xquery&ssid=<SSID>&format=xml-standart

В его теле — непосредственно XQuery. Например, для получения объектов класса Сотрудники (H:1D3F682140A5840/P:WORK/B:1D40ECE5ADC0ED0/C:1D394FB2EC64BF0), атрибут ФИО которых содержит строку «Иванов»:

<x> {*/*[contains(@ФИО, "Иванов")]} </x>

Объекты будут получены как содержимое корневого элемента «x».

Сохранение данных

Для иллюстрации примера был предварительно создан класс TestSaveObject с полями:

  • name (строка);
  • date (дата и время);
  • Count (число).

Для создания объекта класса применяется POST-запрос, здесь WebFullID — идентификатор класса TestSaveObject .

https://demo.odant.org/api/<WebFullID>&ssid=<SSID>?method=save_objects

Тело запроса может содержать XML:

<OBJECTS>
	<OBJECT name="Test" date="2018-03-23T10:00:00" Count="241141"/>
</OBJECTS>

Или JSON:

{
  "OBJECTS":
  {
	"OBJECT":
	{
  	"name":"Test",
      "date":"2018-03-23T10:00:00",
  	"Count":"241141"
	}
  }
}

Тип содержимого пакета сервер определяет автоматически. Для сохранения данных в уже существующий объект достаточно добавить в тело пакета атрибут oid с идентификатором объекта. Результат добавления объекта:

Заключение

Мы привели простейшие примеры взаимодействия с API сервера ODANT для иллюстрации принципов. Подробная информация о том, как работать с API — в  документации.