Ну наверное можно предложить 2 подхода:
1 Юзать новый ajax компонентов, т.е. писать свои компоненты, в которых реализовывать бизнес-логику и использовать встроенный механизм для обращения к ним с фронта. Вот статья кратенькая:
https://verstaem.com/ajax/new-bitrix-ajax/
2 Тупо, в лоб писать скрипты api. Просто скрипты которые просто используют внутренний API проекта, а уже всю логику реализовывать в этом внутреннем API.
Сами скрипты получаются примерно такие, какие-то:
<?
require('.prolog.php');
// добавляем в избранное
$favorites = \Model\Favorites::getInstance();
if ($_REQUEST['add']) {
$favorites->add2Fav(intval($_REQUEST['add']));
} elseif ($_REQUEST['remove']) {
$favorites->remove2Fav(intval($_REQUEST['remove']));
} elseif (strlen(trim($_REQUEST['note'])) && $_REQUEST['fav']) {
$favorites->note2Fav(intval($_REQUEST['fav']),trim($_REQUEST['note']));
}
$arResult['appdata']['user'] = \Model\User::getInstance()->getData();
require('.epilog.php');
Первый подход стильный, модный, молодежный, но и во втором нет ничего криминального, как мне кажется.
В конце концов хочу получить 2 репы, которые ничего друг о друге не знают и общаются через api, сгенерированное тем же Swagger
Классно когда на такие штуки есть бюджет.