Цель: проверить понимание архитектуры Bitrix Framework, умение работать с ядрами системы, API и REST‑интерфейсами, а также навыки безопасной и оптимизированной разработки.
Формат сдачи: архив с кодом + краткий отчёт (1–2 абзаца на задачу), обязательны комментарии в коде
Требуется: разработать кастомный REST‑метод для работы с инфоблоком «Товары» (IBLOCK_ID=1).
Функционал метода:
- Получение списка товаров с пагинацией (limit/offset) и фильтрацией по цене (PRICE_FROM, PRICE_TO).
- Добавление нового товара (поля: NAME, PRICE, ARTICLE, ACTIVE).
- Обновление цены и наличия по ID.
Требования:
- Метод должен быть зарегистрирован в системе через rest.ap.register
- Использовать CIBlockElement::GetList() и CIBlockElement::Add()/Update().
- Валидировать входные данные (тип, обязательность полей).
- Возвращать стандартизированный JSON‑ответ с кодом статуса и данными.
- Добавить авторизацию через OAuth 2.0 (важно использовать только встроенные механизмы Bitrix).
Требуется: доработать REST‑метод из Задачи 1, добавив:
- Обработчик события OnAfterIBlockElementAdd для логирования создания товара в файл /logs/rest_products.log (формат: дата, ID товара, пользователь).
- Кеширование ответов метода catalog.products.list на 5 минут с учётом параметров запроса (фильтр, пагинация). Использовать CPHPCache.
- Автоочистку кеша при обновлении/удалении товара (через события OnAfterIBlockElementUpdate/Delete).
Сценарий: необходимо синхронизировать товары из внешнего API (например, поставщика) с инфоблоком Bitrix.
Требуется: написать скрипт, который:
- Получает данные из внешнего REST‑API (URL: https://api.supplier.com/v1/products, метод GET, токен в заголовке Authorization: Bearer <token>).
- Обрабатывает ответ (JSON с полями: id, title, price, stock).
- Создаёт/обновляет элементы инфоблока «Товары» на основе полученных данных:
- если товар существует (по ARTICLE = id), обновляет цену и наличие;
- если нет — создаёт новый элемент.
- Логирует результаты синхронизации в БД (таблица b_rest_sync_log с полями: TIMESTAMP_X, ACTION, PRODUCT_ID, STATUS).
Требования:
- использовать \Bitrix\Main\Web\HttpClient для запросов;
- обрабатывать ошибки сети и API (таймауты, 4xx/5xx);
- минимизировать количество запросов к БД (использовать CIBlockElement::GetList() с фильтрацией по ARTICLE).
Требуется: провести аудит и доработку REST‑методов из Задачи 1–3 по следующим пунктам:
- Защита от переборных атак: добавить ограничение 10 запросов/минуту на метод catalog.products.list (использовать \Bitrix\Main\Data\Cache для хранения счётчика).
- Фильтрация вывода: исключить из ответа поля XML_ID, CREATED_BY, MODIFIED_BY.
- Оптимизация запросов: переписать выборку товаров с использованием select и filter в CIBlockElement::GetList(), чтобы загружать только необходимые поля.
- Обработка больших объёмов: для метода catalog.products.list добавить параметр fields (например, fields=ID,NAME,PRICE), позволяющий клиенту выбирать возвращаемые поля.
- Архив с кодом:
- структура папок как в Bitrix (/local/components/, /bitrix/php_interface/ и т. д.);
- файлы с REST‑методами, обработчиками событий, скриптом синхронизации;
- описание кода в комментариях.
- Отчёт:
- краткое описание решений (1–2 абзаца на задачу);
- список использованных методов API Bitrix;
- примеры запросов/ответов в формате curl или Postman.
- Скриншоты:
- работа методов в интерфейсе Bitrix REST API;
- логи синхронизации и ошибок.