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 включены логи, то проверьте дисковое пространство и успокойте клиентов.

Для критически важных интеграций после восстановления работы не забудьте пропихнуть данные, если алгоритм обмена не имеет встроенной защиты от подобных ситуаций.
Починили, теперь все работает как надо
👍1
Релокейт-ориентированное программирование
👎2
Вышли на финишную прямую сборки билда v2-alpha7, список изменений и закрытых задач — https://github.com/mesilov/bitrix24-php-sdk/issues/273

Если у вас ещё не горят сроки, то переключитесь на ветку и погоняйте новый функционал.
Быстрый вопрос: у когото были потребности вида «достать активити определённого типа» например, заполнения конкретной CRM-формы или звонки там. Т.е. можно поверх активити сделать хелперы для получения конкретных типов.

Если с таким сталкивались — напишите пожалуйста в комментариях
Новый релиз bitrix24-php-sdk — 2.0-alpha.7
Обновляемся и тестируем! 🚀
https://github.com/mesilov/bitrix24-php-sdk

Добавлено:
— скоуп Telephony и сервисы по работе с ней
— скоуп UserConsent и сервисы по работе с ним
— скоуп Placements и сервисы по работе с ним
— скоуп IMOpenLines и сервисы по работе с ним
— скоуп CRM добавлен сервис Leads
— скоуп CRM добавлен сервис Activity
— скоуп CRM добавлен метод Services\CRM\Deal\Service\Batch:update
— скоуп CRM добавлен метод Services\CRM\Contact\Service\Batch:delete
— скоуп CRM добавлены сервисы Services\CRM\Activity\ReadModel для: EmailFetcher, OpenLineFetcher, VoximplantFetcher, WebFormFetcher
— скоуп Main добавлена поддержка сервиса Events
— добавлена поддержка событий уровня приложения: ONAPPINSTALL и ONAPPUNINSTALL
— добавлена поддержка событий уровня приложения: PortalDomainUrlChangedEvent
— добавлен метод Core\Batch:updateEntityItems
— добавлен метод Core\Contracts\BatchInterface:updateEntityItems
— скоуп Placements добавлен сервис Placement\Service\UserFieldType для работы с типами полей подразумеващюих встройку
— скоуп Telephony, добавлена поддержка событий: OnExternalCallBackStart, OnExternalCallStart, OnVoximplantCallEnd, OnVoximplantCallEnd, OnVoximplantCallInit, OnVoximplantCallStart
— добавлена поддержка DTO ApplicationStatus
— добавлен метод AccessToken:initFromPlacementRequest
— добавлен метод ApplicationProfile:initFromArray when application profile stored in ENV-variables
— добавлена поддержка инициализации плейсментов Bitrix24\SDK\Application\Requests\Placement\PlacementRequest
— добавлен метод Credentials:initFromPlacementRequest когда приложение инициализируется при загрузке плеймента
— добавлен метод Services\Main\Service:getServerTime возвращает время сервера
— добавлен метод Services\Main\Service:getCurrentUserProfile возвращает базовую инфу по текущему юзеру.
— добавлен метод Services\Main\Service:getAccessName возвращает наименования разрешений.
— добавлен метод Services\Main\Service:checkUserAccess
— добавлен метод Services\Main\Service:getMethodAffordability
— добавлена поддержка полей operating и operating_reset_at в Bitrix24\SDK\Core\Response\DTO\Time

Изменено
— обновили состав скоупов
— увеличили требования для компонентов symfony/* до версии 6.*
— метод Services\Main\Service:getAvailableMethods помечен как deprecated
— метод Services\Main\Service:getAllMethods помечен как deprecated
— метод Services\Main\Service:getMethodsByScope помечен как deprecated
❗️метод Bitrix24\SDK\Core\Credentials переименован: createFromWebhook, createFromOAuth, createFromPlacementRequest
❗️удалён класс Bitrix24\SDK\Core\Response\DTO\ResponseDataCollection
❗️удалён класс Bitrix24\SDK\Core\Response\DTO\Result
❗️удалён метод CoreBuilder:withWebhookUrl, используйте
method CoreBuilder:withCredentials

Исправления ошибок
— add bugfix for batch method for reverse order queries
— fix type compatible errors for Core\Result\AbstractItem
— error in NetworkTimingParser
— error in RenewedAccessToken DTO, remove Scope
enum

etc
— добавлена возможность спонсирования разработки https://boosty.to/bitrix24-php-sdk
👍2🔥2
Bitrix24 Apps & BITRIX24-PHP-SDK pinned «Новый релиз bitrix24-php-sdk — 2.0-alpha.7 Обновляемся и тестируем! 🚀 https://github.com/mesilov/bitrix24-php-sdk Добавлено: — скоуп Telephony и сервисы по работе с ней — скоуп UserConsent и сервисы по работе с ним — скоуп Placements и сервисы по работе с…»
Привет, новая сборка SDK на подходе:

2.0-beta.1 — 18.02.2024
https://github.com/mesilov/bitrix24-php-sdk/releases – полный список изменений

Добавлено
add php 8.3, 8.2 support, drop 8.1 and 8.0 support
add Symfony\Component\Uid\Uuid requirements
add contracts for bitrix24 applications based on bitrix24-php-sdk - Bitrix24\SDK\Application\Contracts, now added Bitrix24Account
add service builder factory https://github.com/mesilov/bitrix24-php-sdk/issues/328
add method Bitrix24\SDK\Core\Credentials\Scope::initFromString
add method Bitrix24\SDK\Application\ApplicationStatus::initFromString
add system CRM multi-field type Bitrix24\SDK\Services\CRM\Common\Result\SystemFields\Types\Phone
add scope user,user_basic,user_brief,user.userfield and services https://github.com/mesilov/bitrix24-php-sdk/issues/339
Bitrix24\SDK\Services\User\Service\User::fields - get user fields
Bitrix24\SDK\Services\User\Service\User::current - get current user
Bitrix24\SDK\Services\User\Service\User::add - add user
Bitrix24\SDK\Services\User\Service\User::get - get user
Bitrix24\SDK\Services\User\Service\User::update - update user
Bitrix24\SDK\Services\User\Service\User::search - search users
add method \Bitrix24\SDK\Services\CRM\Contact\Service\Batch::update() for batch update contacts
add crm item support https://github.com/mesilov/bitrix24-php-sdk/issues/330
add enum DealStageSemanticId
add Duplicate search support for Bitrix24\SDK\Services\CRM\Duplicates\Service\Duplicate
add x-request-id header support https://github.com/mesilov/bitrix24-php-sdk/issues/354
add CRM multifields support https://github.com/mesilov/bitrix24-php-sdk/issues/338
Email
Phone
Website
IM
add Catalog https://github.com/mesilov/bitrix24-php-sdk/issues/364 scope services support
👍7
Привет, у нас хорошие новости!

Спонсором разработки https://github.com/mesilov/bitrix24-php-sdk на этот год становится компания Яндекс.

В рамках программы грантов Yandex Open Source компания перечислит 600 000 руб. для развития проекта.
Поддержка будет оказана в виде оплаты расходов в их вычислительном облаке.

По всей видимости, в течении этого года, можно будет ожидать примеров приложений, развёрнутых на базе yandex.cloud
stay tuned 🚀

Если вы уже живёте в их облаке и разрабатываете приложения, то напишите пожалуйста в комментариях свои впечатления и какие сервисы вы используете.
🔥14👍2