Весной «Битрикс24» представил открытый API, который позволяет разработчикам самостоятельно расширять возможности сервиса. В докладе речь пойдёт о том, как обеспечить безопасность не в ущерб функционалу, как решать проблемы, возникающие в поддержке состояния объектов, какие подводные камни таятся в форматах данных. Идемпотентность — нужна ли она и когда именно. Будут рассмотрены примеры использования Маркетплейса. Также поговорим о том, как масштабировать проекты и куда расти.
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
"API «Битрикс24» — разбор с пристрастием". Александр Сербул, 1С-Битрикс
1.
2. API
Битрикс24
-‐
изнутри,
с
пристрастием
Сербул
Александр
руководитель
направления
контроля
качества
интеграции
и
внедрений
1С-‐Битрикс
AlexSerbul
3. Битрикс24
–
с
чем
будем
общаться
через
API
Рабочие инструменты в «социальном» формате – в облаке
8. Объекты
в
REST
API
Битрикс24:
ü пользователи
и
их
иерархия,
структура
компании
ü отправка
уведомлений
–
email,
push
на
моб.
устройства,
desktop
app.
ü работа
с
задачами
ü CRM
ü календари
ü работа
с
абстрактными
древовидными
данными
(инфоблоками)
Битрикс24
–
REST
API
9. RFC
6749
-‐
философия
на
тему
редиректов
J
Написали
свой
OAuth2.0
веб-‐сервис
на
PHP.
Поддержали
самый
полный
flow
–
«4.1.
AuthorizaDon
Code
Grant».
«1.3.1.
Authorizaqon
Code»
–
время
жизни
30
сек.
«3.3.
Access
Token
Scope»
–
поддерживаем
уровни,
не
мельче
модуля
«6.
Refreshing
an
Access
Token»
–
обновляем
Access
Token,
время
жизни
–
1
час
«7.1.
Access
Token
Types»
–
простой
токен
пока
(строка),
думаем
про
MAC
и
подписи
OAuth
2.0
–
детали
поддержки
протокола
10. 1) «Внутреннее»
–
архив
html+js+ресурсы
загружается
в
облако
Битрикс24
2) «Встраиваемое»
-‐
через
iframe
на
портале
пользователи;
контроллер
iframe
-‐
на
сайте
партнера/разработчика
3) «Внешнее»
-‐
доступ
только
к
API
Битрикс24
Типов
может
быть
больше,
думаем
как
их
классифицировать.
Типы
приложений
11. Все
настраивается
в
«личном
кабинете»
разработчика:
• URI
приложения
–
для
контроля
адреса
приложения
и
iframe
• Список
прав
(scope)
–
ограничение
доступа
приложения
к
API
• Пароль
приложения
–
для
получения
Access
Token
Настройка
прав
OAuth
2.0
–
Access
Token
Scope
14. https://домен_Б24.bitrix24.{ru|en|de}/rest/имя_метода.транспорт?
параметры_метода&
auth=ключ_авторизации
https://my.bitrix24.ru/rest/methods.xml?auth=d161f25928c3184678924ec127edd29a - получить список доступных
методов в формате xml.
https://my.bitrix24.ru/rest/entity.item.get.json?ENTITY=menu&auth=d161f25928c3184678924ec127edd29a -
получить в формате json список всех элементов сущности menu.
{
"result": результат выполнения метода,
"error": ошибка выполнения метода,
"total": общее количество записей в ответе списочного метода,
"next": число, которое нужно послать для получение следующей страницы
данных списочного метода
}
{
"result": массив результатов запросов пакета,
"result_error": массив ошибок запросов пакета,
"result_total": массив количеств записей в ответах списочных методов,
"result_next": массив чисел, возвращенных в полях next запросов.
}
Структура
запросов/ответов
REST
API
15. ü Прячет
детали
авторизации
ü «Постраничка»
ü Пакетные
запросы
с
макроязыком
подстановки
ü Полезные
callbacks
ü Доступ
к
АПИ
модулей
и
сущностей
<script src="//api.bitrix24.com/api/v1/">
</script>
JS
библиотека-‐клиент
API
Битрикс24
16. • Вызов
методов
API:
BX24.callMethod('user.get', {ID: 10},
function(res){
if(res.data())
{
var user = res.data()[0];
if(user)
alert('Пользователя №' + user.ID +
' зовут ' + user.NAME);
}
});
JS
библиотека-‐клиент
API
Битрикс24
• Batch:
BX24.callBatch({
get_user: ['user.current', {}],
get_department: {
method: 'department.get',
params: {
ID: '$result[get_user]
[UF_DEPARTMENT]'
}
}
}, function(result)
{
var l = result.get_department.data().length;
var str = 'Текущий пользователь ' +
result.get_user.data().NAME + ' ' + result.get_user.data().LAST_NAME
+ ' приписан к подразделени' + (l > 1 ? 'ям ' : 'ю ');
for(var i = 0; i < l; i++)
{
str += i == 0 ? '' : ', ';
str += result.get_department.data()[i].NAME;
}
alert(str);
});
17. • Загрузка
файлов
–
имя
и
содержимое
в
base64
<input type="file" id="testfile"><br />
<span onclick="sendInputFile()">send file from input</span><br />
<span onclick="sendStaticFile()">send static file</span><br />
<script type="text/javascript">
function sendInputFile()
{
BX24.callMethod('entity.item.add', {
'ENTITY': 'menu',
'NAME': Math.random(),
'DETAIL_PICTURE': document.getElementById('testfile')
}, function(){
alert('Finished!');
});
}
POST https://my.bitrix24.com/rest/entity.item.add.json HTTP/1.1
Host: my.bitrix24.com
Content-Length: 186
Content-Type: text/plain; charset=UTF-8
Origin: http://app.makssidorenko.bx
auth=6a8c365cb010ba42bd5b0f6ae803f47c&ENTITY=menu&NAME=0.2630483947652045&DETAIL_PICTURE[0]=1.gif&DETAIL_PICTURE[
1]=R0lGODlhAQABAIAAAP%2F%2F%2FwAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw%3D%3D
JS
библиотека-‐клиент
API
Битрикс24
19. Дерево
Сортировка,
фильтрация
Разные
типы
свойств
BX24.callMethod('entity.add', {'ENTITY': 'dish', 'NAME': 'Dishes', 'ACCESS': {U1:'W',AU:'R'}});
BX24.callMethod('entity.get');
{"result":[{"ENTITY":"dish","NAME":"Dishes"},{"ENTITY":"menu","NAME":"Menu"}]}
BX24.callMethod('entity.update', {'ENTITY': 'dish', 'ACCESS': {U1:'W',AU:'R'}});
BX24.callMethod('entity.delete', {'ENTITY': ‘dish'}});
'ENTITY': 'dish‘ – созданный клиентом и уникальный в рамках приложения ID хранилища. Для обеспечения
идемпотентности. Планируем добавить в другие методы.
Хранилище
данных