🔌API
API Bpium построено на идеологии REST, формат передачи данных — JSON.
Ресурсы
API состоит из ресурсов.
Работа с пользовательскими и системными данными:
Каталоги (Catalog) — список каталогов с описанием структуры полей
Записи (Records) — список записей каталога с значением полей
Связи (Relations) — список записей, которые ссылаются на указанную запись
История (Histories) — список операций по изменению записи
Файл (Files) — информация о файле в файловом хранилище
Отделы (Sections) — список отделов (групп каталогов)
Виды (Views) — список видов каталога с условиями фильтрации записей
Агрегация/сводные данные:
Разложение (Values) — разложение записей каталога по какому-либо полю с подсчетом сводных значений по другому полю
Сводка (Totals) — подсчет сводного значения в каталоге по какому-либо полю
Отчеты:
Дашборды (Boards) — список экранов с графиками с описанием параметров графиков
График (Widgets) — значения графика
Дополнительные поисковые выборки:
Доступные связи (AvailableRecords) — список записей, доступных для связывания в поле типа «связанный объект» (используется в выпадающем списке поля «связанный объект»)
Сотрудники (Users) — список сотрудников, доступных в системе (используется в выпадающем списке поля типа Сотрудник)
Доступные условия фильтра (AvailableFilterRecords) — список записей, которые можно выбрать как условие фильтра записей в поле типа «связанный объект»
Контакты (Contacts) — список записей всей системе с поиском по полю контакт
Правовая политика
Права (Rights) — список правил на доступ к объекту (отделу, каталогу, виду, записи)
Связанные с событиями и процессами:
Лайв-события (Changes) — запрос на вызов события «изменено поле время редактирования» для запуска сценария обработки значения полей, которые вводит сотрудник в анкете записи
Системные:
Профиль (Profile/me) — информация о текущем авторизованном пользователе
Компания (Company) — информация о текущей компании доступ
Компании (Companies) — список компаний, к которым пользователь имеет доступ
Лицензия (License) — информация о лицензии
Методы
Ресурсы имеют однотипные CRUD-методы: создания (Create), получения (Read), изменения (Update) и удаления (Delete). Ресурсы имеют только те методы, которые логически необходимы.
Для каждого метода используется свой тип HTTP-запрос:
Получить коллекцию ресурсов — запрос GET
Получить ресурс — запрос GET
Создать ресурс — запрос POST
Изменить ресурс — запрос PATCH
Удалить ресурс — запрос DELETE
Формат запросов
API Бипиума использует формат передачи данных JSON
, кодировка utf-8
.
HTTP-заголовок: content-type: application/json
Доступ к API
Относительный адрес API:
/api/v1/{ресурс}/{?ID-обьекта}
Адрес API в облаке:
https://{вашдомен}.bpium.ru/api/v1/{ресурс}/{?ID-обьекта}
Авторизация
Запросы к API проходят полноценную проверку прав доступа к данным. По этому все запросы должны быть выполнены от имени одного из сотрудников. Именно его права будут применены при исполнении запросов. Способы авторизации:
Базовая авторизация
Параметры передаются через HTTP-заголовок Authorization
. Логин и пароль склеиваются через двоеточие и кодируются через функцию Base64. Пример:
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Подробнее о стандарте: Basic authentication.
Некоторые веб-клиенты позволяют автоматически формировать заголовок базовой авторизации, если логин и пароль передан через URL (пример: https://login:[email protected]/...
). Браузер Chrome, например, будет так делать, только если сервер пошлет специальный заголовок. Однако, сервер Bpium не отправляет такой заголовок, так как придерживается методологии REST.
Авторизация через POST
Авторизоваться в Bpium можно отправив POST-запрос на страницу авторизации:
https://{вашдомен}.bpium.ru/auth/login
Post-параметры: email
и password
.
Авторизация через сессионную Cookie
Для использования установленной авторизации подписывайте запросы сессионной cookie sid
(или переменную с другим именем, которая задается в конфигурационном файле сервера). Для компаний в облаке bpium.ru сессионная cookie имеет название connect.sid
.
Формат передачи http-заголовка с сессионной cookie в hhtp-запросе к серверу:
cookie: connect.sid=значение; другиеКуки=...
Часовой пояс
Сервер Bpium хранит даты в нулевом часовом поясе (UTC). Задача преобразования дат и времени в нужный часовой пояс лежит на стороне получателя (клиента). Однако, некоторые запросы сервера требуют учета часового пояса клиента для выбора данных. Например, поиск записей по датам или построение графиков по датам. Если не передать часовой пояс клиента, то сервер найдет данные, которые не соответствуют ожиданиям клиента.
Для этого инициатор API-запросов указывает часовой пояс через GET-параметр timezoneOffset
. Значение параметра следует указывать в минутах. Например, для +3 часового пояса:
https://{вашдомен}.bpium.ru/api/v1/catalogs/5?timezoneOffset=180
Коды HTTP-ответов ошибок
400 — некорректный запрос (не верные параметры, не прошла валидация)
401 — ошибка авторизации
402 — необходима оплата лицензии (не действует базовая лицензия)
403 — доступ запрещён по правам
404 — ресурс/объект не найден
405 — метод не разрешён для использования
426 — необходима докупка лицензий (доступ к модулям не входящим в лицензию)
429 — превышено число допустимых запросов (лимит частоты запросов)
500 — неизвестная ошибка сервера (не обработанное исключение в коде сервера)
501 — метод ресурса не существует или не реализован
Лимиты
Бипиум лимитирует число запросов к API. Параметры лимитирования запросов задаются в конфигурационном файле сервера, а так же могут быть изменены для каждой учетной записи (пользователя) индивидуально.
Для облака bpium.ru заданы следующие лимиты числа запросов:
100 запросов за 30 секунд для одной учетной записи
500 запросов за 30 секунд для одного IP-адреса
Если число запросов превышено, Бипиум вернет ошибку с HTTP-кодом 429 (Too Many Requests).
В коробочной версии Bpium Enterprise эти параметры задаются в конфигурационном файле:
LIMIT_USER_MAX_REQUESTS
(int) — максимальное число запросов от одного аккаунта за интервал. По умолчанию: 100LIMIT_USER_REQUEST_DURATION
(int) — интервал оценки числа запросов от одного аккаунта. В миллисекундах. По умолчанию: 30000LIMIT_IP_MAX_REQUESTS
(int) — максимальное число запросов с одного IP-адреса за интервал. По умолчанию: 1000LIMIT_IP_REQUEST_DURATION
(int) — интервал оценки числа запросов с одного IP-адреса. В миллисекундах. По умолчанию: 30000
Примеры использования
JavaScript (Node.js и во фронте)
Для удобства работы с базовыми ресурсами и методами создана публичная библиотека:
https://www.npmjs.com/package/bp-api
PHP
Пример создания новой записи в каталоге:
// домен и авторизация
$domen = 'ВАШДОМЕН.bpium.ru';
$user = '[email protected]';
$pass = 'mypass';
// номер каталога, в котором создать новую запись
$catalog_id = 13;
// массив значений полей новой записи
// ключи массива — идентификаторы полей
$values = array();
$values['2'] = ''; // строка для текстовых полей
$values['3'] = array('1'); // массив для полей типа категория, набор галочек, вопрос
$values['4'] = 17; // число для полей типа число, прогресс, звёзды
$values['5'] = date('Y-m-d') . "T" . date('H:i:s') . "+04:00"; // даты
// подготовка тела запроса
$data = array();
$data['values'] = $values;
$data_json = json_encode($data);
// выполнение http-запроса
$ch = curl_init("https://$domen/api/v1/catalogs/$catalog_id/records");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "$user:$pass");
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data_json))
);
$result = curl_exec($ch);
Last updated