Зовнішнє webapi

Додатково до кореневих сервісів на сервері є велика кількість функціональних сервісів, ці сервіси надають функціонал модулів системи: виконання завдань, створення доручень і подій в календарі і т.д.

Кореневі сервіси системи

До кореневих сервісів відносяться:

Для всіх кореневих сервісів передбачено 2 точки входу: WCF HTTP і WCF SOAP. Отримати доступ до тій чи іншій точці можна наступним чином:

/ API / REST /<Имя сервиса>/ Help. для AuthorizationService це буде

У режимі WCF HTTP всі сервіси (крім MetadataService) підтримують як XML так і JSON формати даних. Формат встановлюється за допомогою заголовка:

  1. Accept: application / xml (або Content-Type: application / xml для POST запиту) - для обміну в форматі XML
  2. Accept: application / json (або Content-Type: application / json для POST запиту) - для обміну в форматі JSON

Сервіс MetadataService підтримує тільки XML формат обміну даними

Довірені програми та сесії з'єднання

Токен додатки можна налаштувати і подивитися на сторінці сервера Елма

Налаштування токенов зовнішніх додатків здійснюються в розділі адміністрування, при цьому є ряд системних токенов термін закінчення яких встановлюється окремо для кожної програми.

Створення нового зовнішнього застосування і токена

Створимо зовнішню програму і токен для нього. Для цього потрібно перейти в розділ Адміністрування -> Система -> Зовнішнє додатки і натиснути на кнопку «Додати».

Зовнішнє webapi

Далі заповнюємо необхідні поля для нашого застосування і натискаємо «Зберегти».

Зовнішнє webapi

Після цього потрібно перейти в створене додаток і включити його.

Зовнішнє webapi

Тепер можна додати токен. Переходимо у вкладку «Токени додатки», натискаємо на «Додати токен» і вибираємо термін закінчення.

Зовнішнє webapi

Нове зовнішні додаток готове, і тепер можна з ним працювати.

Довідка поWebAPI

Існує автогенеріруемая довідка по WebAPI. У ній міститься інформація про те, які є доступні сервіси, об'єкти, перерахування та типи даних для властивостей. Вона розташована по відносній посиланням

Зовнішнє webapi

Розглянемо більш детально кожен з цих пунктів.

Список доступних публічних веб-сервісів

Містить інформацію про те, які веб-сервіси системи доступні для виклику сторонніх додатків.

Зовнішнє webapi

Кожен з веб-сервісів містить інформацію про методи, які можна викликати з даного веб-сервісу, а також про параметри методу і повернутому значенні.

Зовнішнє webapi

Також кожен сервіс містить інформацію про способи виклику методів: або через WSDL. або через Http запити.

Інформація про виклик через WSDL

Інформація про виклик через Http запити

Зовнішнє webapi

Перейшовши всередину методу, можна дізнатися інформацію про те, в якому форматі необхідно створювати запит і в якому вигляді прийде відповідь.

Зовнішнє webapi

Список типів об'єктів (сутностей)

Містить інформацію про всі об'єкти системи, в тому числі і про процеси.

Зовнішнє webapi

Зовнішнє webapi

Кожен представлений тут тип містить інформацію про своїх властивостях. У процесах міститься інформацію про їх контексті.

Зовнішнє webapi

список перерахувань

Містить інформацію про всі доступні перерахування системи.

Зовнішнє webapi

Кожне представлене тут перерахування зберігає інформацію про своїх значеннях.

Зовнішнє webapi

Список типів даних для властивостей

Містить інформацію про ідентифікатори типу даних. тут:

  • Сутність (72ed98ca-f260-4671-9bcd-ff1d80235f47)
  • Тип проекту (d1397b84-f5ab-4665-984f-fdeb8f77eb0b)
  • Тип документа (a3a41ae4-30e2-4c46-bba2-ee55efdc7b90)
  • Тип РКК (691ed407-4007-4530-834b-0c6a34bb9af1)
  • Перерахування (849c1ac9-4d46-4194-8cbb-43f84adf9c17)

2. Ідентифікатор підтипу даних - це унікальний ідентифікатор кожного типу об'єкта. Даний ідентифікатор неможливо повтори.

Зовнішнє webapi

приклад іспользованіяWebAPI

Є два варіанти взаємодії з WebAPI кодом: через WSDL- сервіси і через Http- запити. Нижче представлені приклади мінімальної роботи з веб апі для кожного варіанта.

Робота черезHttp-запити

Оскільки йде робота з потоком, після використання функції ReadToEnd () символів у змінній sr НЕ буде (залишиться тільки порожній рядок). Результатом виконання функції буде ось така відповідь:

<
"AuthToken": "39c45713-59c0-48db-aeee-77e93579b330",
"CurrentUserId": "1",
"Lang": "ru-RU",
"SessionToken": "0B56F7016540A75C5352942FDD3E40FAC7E73663B3BD1279B39780215603285F28432FD2D2940842A5BFF83BA97830A07577004F6CE61E10E2A9C1885A74192B"
>

  1. typeUid - унікальний ідентифікатор типу «Завдання».
  2. entityId - ідентифікатор об'єкта

Тут представлена ​​лише частина відповіді, тому що вся відповідь занадто великий. Якщо вам потрібна тільки частина полів будь-якого об'єкта, використовуйте функцію LoadTree. Щоб завантажити декілька об'єктів одним запитом, використовуйте функцію Query (для завантаження всіх полів об'єкта) або QueryTree (для завантаження певних полів об'єкта).

Нижче наведено код виклику функції Query.

  1. typeUid - унікальний ідентифікатор типу «Завдання».
  2. eqlQuery - запит на мові EQL.
  3. limit - кількість одержуваних елементів
  4. offset - початковий елемент
  5. sort - сортування
  6. filterProviderUid - унікальний ідентифікатор провайдера фільтрації
  7. filterProviderData - дані для провайдера фільтрації
  8. filter - значення полів для фільтра суті

В поле «Result» повернулося True. Це означає, що завдання було успішно завершена. Якщо з якої-небудь причини цього не вдалося зробити, в поле «Result» повернеться False.

РаботачерезWSDL

Зовнішнє webapi

При успішному додаванні сервіс з'явиться в «Обозревателе рішень».

Зовнішнє webapi

Аналогічним чином додаємо посилання на IEntityService.

Тут нам знадобиться простір імен System.ServiceModel.Web.

Приступаємо до роботи. Для зручності створимо клас WsdlService і почнемо в ньому роботу.

Мінлива _entityServiceFactory (і подібні) служить для створення каналу зв'язку з сервером. Вони не започатковано в функції TestStart (). Сам же канал зв'язку створюється за допомогою CreateChannel ().

Розглянемо функцію GetAuthToken (). Мінлива authorizationService - це вже створений сервіс, всередині себе містить методи, які описані в довідці по WebAPI.

Використання каналу відбувається всередині using (...) <…>. Це потрібно для передачі необхідних заголовків при використанні різних функцій сервісу.

Відловив цю помилку, можна отримати наступну інформацію:

  1. Повідомлення про помилку
  2. Веб-код помилки (приклад: 400, 401, 500)
  3. Внутрішню помилку (якщо така є)

і багато іншого.

Помилка з кодом 500 пов'язана з внутрішньою помилкою сервера. Найчастіше причиною для неї можуть бути:

  1. Помилка при виконанні коду на сервері
  2. Відсутність конкретного об'єкта (приклад: використання функції Load)
  3. Відсутність певного типу об'єкта (коли typeUid не існує)

Теоретично можливі помилки і з іншими кодами, але вони дуже рідкісні.

Переходимо до завантаження завдання. Додамо в створений клас функцію LoadTask ().

Тут представлена ​​лише частина полів, що повертаються функцією.

Деякі функції може відобразитися наступна помилка:

Додаткові відомості: Перевищено квота максимального розміру повідомлення для вхідних повідомлень (65536). Для збільшення квоти використовуйте властивість MaxReceivedMessageSize відповідного елемента прив'язки »

Це відбувається тому, що відповідь від сервера приходить занадто великий, і обмеження на вашому додатку не може його пропустити. Щоб цього уникнути, використовуйте ініціалізацію змінних _entityServiceFactory наступним чином:

Версія API 1.0.1 в ELMA 3.2

Приклад реалізації власного сервісу WebAPI

Схожі статті