Bitrix24 Apps & BITRIX24-PHP-SDK
126 subscribers
7 photos
8 videos
38 links
Разработка приложений для Bitrix24 на базе BITRIX24-PHP-SDK
Download Telegram
Сегодня суббота, а значит пора надевать шляпу мейтейнера bitrix24-php-sdk

Сегодня больше про мои ожидания к продукту который *SDK:

- хороший DX (Developer Experience), если вы считаете себя девелопером, то критикуйте ветку 2.x

- хорошая документация - надо писать, да, с примерами

- производительность: влияние на клиентский код должно быть минимальным, а продукт должен предоставлять возможность ворочать большими объёмами данных, иначе зачем нам эта машинерия вся

- работать на современном стеке технологий. Все мы не любим копаться в копролитах, поэтому стараемся использовать новые подходы и фичи языка, современные низкоуровневые библиотеки для сетевого взаимодействия.

- надёжной - тесты, тесты, разные сценарии использования в комьюнити и обратная связь.

Сейчас я делаю подсистему для удобной работы с batch-запросами, дальше все рассуждения и бенчмарки буду уже в канал в телеграм складывать.

(вы находитесь тут)

Домен для пользовательской документации по sdk тоже планирую зарегить.
В рамках работы с batch-запросами в документацию добавлена страница с замерами времени работы в зависимости от:
— сортировка, подсчёт количества элементов в выборке;
— сортировка, без подсчёта количества элементов в выборке;
— сортировка по умолчанию, подсчёт количества элементов в выборке;
— сортировка по умолчанию, без подсчёта количества элементов в выборке;

Тесты проводились на портале где было создано 100к контактов.

TL;DR;
1. По возможности старайтесь избегать выборки всех данных по сущности.
2. Сортировка данных при больших выборках тоже слишком дорогая операция
3. В roadmap SDK будет добавлена задача на поддержку batch-запросов в режиме «отключенный подсчёт количества» элементов, сейчас там указано not implemented.

Вся статья → https://amp.gs/oei3
👍1
Была очередная суббота, я немного покомитил в #BITRIX24PHPSDK
что нового с 14 декабря:

— я заболел ковидом, повалялся в больнице и выписался с 30% поражением лёгких, сейчас потихоньку восстанавливаюсь;

— до болезни получилось обстоятельно поговорить с Валентин Удальцов (https://t.iss.one/vudaltsov/) по поводу подходов к проектированию новой версии SDK, рекомендую. Пожалуй, лучшая трата 6к рублей за консультацию.

— изменений в само SDK приехало много, как и обещал я стараюсь во второй версии гораздо больше внимания уделять DX — developer experience. Описание изменений в самой доке тут https://amp.gs/MRII

Кратко:
— результаты API-вызовов иммутабельные и полностью аннотированные в формате phpstan

— все API-методы аннотированны и предоставляют автокомплит (нарежу видосы и гифки в ближайшх субботних подходах).

— результаты CRUD-операций стали типизированы и получили свой синтаксический сахар

— т.к. #Bitrix24 порой в ответах заставляет меня удивляться, то в папка tests теперь содержит и интеграционные тесты. Да, подпихни свой вебхух и смотри, как отвечает конкретный портал.

— батч-запросы тоже унифицирую по сервисам и типизирую, они стали ещё лаконичнее

Ближайший чекпоинт — это полное покрытие сервисами для scope CRM, на нём соберу большую часть граблей, дальше будет уже механическая работа по добавлению остальных 38(?) скоупов.

https://amp.gs/MRIT — вторая версия про которую идёт речь
#bitrix24phpsdk новости от 30.01.2021

Ветка 2.0 приводится в порядок, стал писать осмысленный чейнджлог:

https://github.com/mesilov/bitrix24-php-sdk/tree/2.x
remove Travis CI and migrate to Github Actions
add unit-tests in independent GitHub action
add phpstan checks in independent GitHub action
add in scope «CRM» Contacts service and integration test
add in scope «CRM» Contacts batch service and integration test
add in scope «CRM» Products service and integration test
add in scope «CRM» Settings service and integration test
add in scope «CRM» DealCategoryStage service and integration test
add in scope «CRM» DealProductRows service and integration test
add in scope «CRM» DealContact service and integration test
add in scope «IM» IM service and integration test
add in default scope «Main» default service


Следующая точка приложения усилий — документация для разработчиков, сейчас вроде всё очевидно, но вопросы в личных сообщениях намекают, что документацию нужно писать)
Привет, я снова выхожу на связь (*・ω・)ノ
Две новости:

1. Текущая кодовая база в ветке 0.x замораживается и будет жить в ветке релизов 1.x, возможностей поддерживать её у меня нет, если нужно — открывайте MR. В своих проектах можно зафиксировать тег 1.0.0 и у вас уже ничего не изменится.

2. 💥 В мастер будет влита текущая ветка 2.x с полной потерей обратной совместимости. Релизы по ней будут идти с альфа префиксами.

Если у вас старый проект, то можно жить на ветке 1.x и планировать миграцию на 2.x, гайд по миграции я положу в документацию.

Новые проекты лучше сразу стартовать на 2.x 🙂
Привет, у нас сборка 2.0-alpha.5 и 300 🍾 на GitHub

Добавили
— метод countByFilter подсчёт количества элементов по фильтру.
— для скоупа «CRM» добавлен сервис по работе с пользовательскими полями сущности Deal и интеграционные тесты.
— для скоупа «CRM» добавлен сервис по работе с пользовательскими полями сущности Contact и интеграционные тесты.
— для объекта ContactItemResult добавлен метод getUserfieldByFieldName.
— для объекта DealItemResult добавлен метод getUserfieldByFieldName.

Удалили
— старый код, который относился к кодовой базе веток 0.x и 1.x

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

ContactItemResult теперь возвращает ожидаемые типы данных: DateTimeInterface, int, boolean и т.д.
DealItemResult теперь возвращает ожидаемые типы данных: DateTimeInterface, int, boolean и т.д.
— добавлены интеграционные тесты на все поддерживаемые на текущий момент сервисы, для их запуска почитайте доку и подставьте входящий вебхук от тестового портала.
— в сборку релиза добавлены шаги запуска интеграционных тестов и статического анализа силами phpstan, пусть работают роботы.

Из-за объёма кодовой базы работа предстоит большая, поэтому в каждом релизе будем постепенно добавлтяь новые объекты типа *Result

https://amp.gs/jYskW
🚀 Новый релиз bitrix24-php-sdk 2.0-alpha.6

Добавлено
— интеграционные тесты запускаются в GitHub Actions pipeline 🎉, пока для ветки dev.
— для разработчиков REST-API Битрикс24 сделана ручка vendor-check.yml которая позволяет запускать интеграционные тесты после релиза новой версии на тестовый NFR-портал. Так будут проверять, что при релизе новой версии Битрикс24 соблюдается контракт на API.
— в batch добавлен метод getTraversableList который по умолчанию не использует подсчёт количества элементов, на больших объёмах данных получили x2 прироста к скорости выборки данных и довольного модератора в маркетплейсе, т.к. снизится нагрузка на порталы.
— в CoreBuilder добавили Credentials.
— в Batch::deleteEntityItems добавлен метод для пакетного удаления элементов.
— добавлен сервис BulkItemsReader который содержит в себе стратегии получения данных для приложений заточенных на экспорт данных. Сейчас там только «наивная» стратегия использующая батч-запросы без подсчёта количества элементов, есть большой задел по оптимизации скорости выборки данных за счёт мультиплексирования запросов.
— добавлен интегрфейc Core\Contracts\DeletedItemResultInterface c результатом удалёния сущности.
— для скоупа «CRM» добавлен метод пакетного удаления сделок
Services\CRM\Deal\Service\Batch:delete batch delete deals.
— добавлен NetworkTimingsParser для разбора и проброса структур данных curl_info в логи для отладки.

Изменено
— компоненты Symfony обновлены до 5.4
— psr/log ожидается версий от 1 до 3.

Полный список изменений
👍1
У Битрикс24 наблюдаются проблемы в работе rest-api, ребята в курсе проблемы и занимаются её решением.

Если у вас в sdk включены логи, то проверьте дисковое пространство и успокойте клиентов.

Для критически важных интеграций после восстановления работы не забудьте пропихнуть данные, если алгоритм обмена не имеет встроенной защиты от подобных ситуаций.