Skip to content

Latest commit

 

History

History
84 lines (56 loc) · 6.14 KB

File metadata and controls

84 lines (56 loc) · 6.14 KB

Тестовый задание для программиста 1С‑Битрикс

Цель: проверить понимание архитектуры Bitrix Framework, умение работать с ядрами системы, API и REST‑интерфейсами, а также навыки безопасной и оптимизированной разработки.

Формат сдачи: архив с кодом + краткий отчёт (1–2 абзаца на задачу), обязательны комментарии в коде

Задача 1. Создание REST‑метода для управления товарами - [ ]

Требуется: разработать кастомный 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).

Задача 2. Работа с событиями и кешированием в REST‑контексте - [ ]

Требуется: доработать REST‑метод из Задачи 1, добавив:

  • Обработчик события OnAfterIBlockElementAdd для логирования создания товара в файл /logs/rest_products.log (формат: дата, ID товара, пользователь).
  • Кеширование ответов метода catalog.products.list на 5 минут с учётом параметров запроса (фильтр, пагинация). Использовать CPHPCache.
  • Автоочистку кеша при обновлении/удалении товара (через события OnAfterIBlockElementUpdate/Delete).

Задача 3. Интеграция с внешним сервисом через REST API Bitrix - [ ]

Сценарий: необходимо синхронизировать товары из внешнего 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).

Задача 4. Безопасность и оптимизация REST‑методов - [ ]

Требуется: провести аудит и доработку 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), позволяющий клиенту выбирать возвращаемые поля.

Формат сдачи

  1. Архив с кодом:
    • структура папок как в Bitrix (/local/components/, /bitrix/php_interface/ и т. д.);
    • файлы с REST‑методами, обработчиками событий, скриптом синхронизации;
    • описание кода в комментариях.
  2. Отчёт:
    • краткое описание решений (1–2 абзаца на задачу);
    • список использованных методов API Bitrix;
    • примеры запросов/ответов в формате curl или Postman.
  3. Скриншоты:
    • работа методов в интерфейсе Bitrix REST API;
    • логи синхронизации и ошибок.