Налаштування Magento 2 API: REST, GraphQL, кастомні ендпоінти

Інтеграції із зовнішніми системами гальмують, а обмін даними дає збої під навантаженням? Ми налаштовуємо Magento 2 API під ключ: REST, GraphQL і кастомні ендпоінти — з політиками доступу та лімітами. Вибудовуємо API-шар так, що час обміну даними скорочується в рази, а інтеграції працюють передбачувано.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Налаштування Magento 2 API: REST, GraphQL, кастомні ендпоінти
Складний
~3-5 днів
Часті запитання

Чому Magento 2 API гальмує та видає помилки під навантаженням

Magento 2 API — це, по суті, фасад над каталогом, цінами, залишками та замовленнями: REST для синхронних операцій, GraphQL для вітрини, кастомні ендпоінти під задачі, яких немає в ядрі. Поки трафік невеликий, усе виглядає здоровим.

Під навантаженням починають проявлятися вузькі місця інтеграції, які в спокійному режимі не видно: помилки API сиплються пачками, відповіді розтягуються, а частина запитів просто відвалюється за таймаутом.

Перше, що варто перевірити, — як влаштовані вибірки. Колекція із завантаженими зв'язками на кожен товар перетворює один запит на сотні звернень до бази, і це перше місце, де навантаження на API йде в нелінійне зростання.

Друге — кеш: якщо відповіді каталогу не кешуються на рівні шару API, кожен виклик перераховує те саме, хоча дані не змінювалися. Третє — блокування БД: паралельні записи за залишками та замовленнями починають чекати одне одного, і замість помилки клієнт отримує завислий запит.

Окрема категорія — ліміти на боці інтеграцій. Зовнішня система може різати частоту звернень, і тоді винним виглядає Magento 2 API, хоча проблема в тому, як вибудувана черга та повторні спроби.

Ми розбираємо ці чотири шари по порядку — запити, кеш, блокування, ліміти — і показуємо, як кожен закривається на рівні конфігурації та коду, а не «збільшенням сервера».

Що дає вибудуваний API-шар для бізнесу та інтеграцій

Швидкість відгуку під навантаженням

Каталог із десятками тисяч позицій і кошик на піку розпродажу — це тисячі паралельних запитів за секунду.

Грамотно вибудуваний API-шар відповідає за частки секунди там, де «сира» інтеграція починає впиратися в ліміти й віддавати таймаути: важкі вибірки йдуть у кеш, повторювані запити не перераховуються заново, а відповіді віддаються в компактному вигляді.

Вітрина, мобільний застосунок і партнерські канали отримують дані одночасно, без черг і «плаваючої» швидкості.

Стабільність обміну із зовнішніми системами

Інтеграції ламаються не від навантаження, а від несподіваних відповідей: склад повернув неповний список, платіжний сервіс надіслав помилку, служба доставки змінила формат.

Ми закладаємо повторні спроби з наростаючою паузою, ізоляцію збійного каналу та журнал обміну, за яким видно, де саме загубилися дані.

Один занепалий сервіс перестає тягнути за собою решту — замовлення, залишки та статуси доходять до адресата, а розбіжності розбираються за логом, а не пошуком навмання.

Менше ручних операцій

Кожен обмін, який раніше робили руками — вивантаження прайсів, звірка залишків, перенесення замовлень в облікову систему, — переводиться в автоматичний режим за розкладом або подією.

Співробітник перестає бути «мостом» між системами: дані синхронізуються самі, а людина підключається лише до спірних випадків. Це знижує частку помилок введення і звільняє час команди під завдання, які справді потребують рішення.

Готовність до нових каналів

Коли API-шар описаний і стабільний, підключення нового каналу — маркетплейсу, партнерської вітрини, мобільного клієнта — перестає бути окремим проєктом. Новий споживач отримує ті самі перевірені точки доступу зі зрозумілими правилами й обмеженнями, а не збирає дані «як вийде». Саме тому вкладення в API окупаються не на першому релізі, а на кожному наступному підключенні.

REST, GraphQL і кастомні ендпоінти: порівняння підходів

Вибір протоколу обміну — це не смакове рішення, а наслідок того, хто і як часто звертається до даних.

Вітрина, мобільний застосунок і внутрішня система інтеграції висувають до одного й того самого каталогу різні вимоги: одним потрібен повний об'єкт із десятком вкладених сутностей, іншим — три поля для картки у списку. Тому в Magento 2 API ми майже завжди комбінуємо режими, а не обираємо один «правильний».

Варіант Коли підходить Обмеження
REST Обмін з обліковими системами, вивантаження в ERP, операції запису: замовлення, залишки, ціни Надлишкові відповіді: тягне весь об'єкт, навіть коли потрібні два поля. Зростає кількість запитів під час складання складених сторінок
GraphQL Вітрина та мобільні клієнти: вибірка рівно тих полів, що потрібні екрану Лише читання. Складні запити без обмеження глибини б'ють по базі, потрібні ліміти та кеш
Кастомні ендпоінти Нестандартна логіка: розрахунок доставки, персональні ціни, агрегати із зовнішніх сервісів Потребують супроводу під час оновлень платформи та власного покриття тестами

Чому REST залишається для операцій запису

REST передбачуваний там, де важлива транзакційність: створення замовлення, списання залишку, синхронізація статусів. Кожен виклик — атомарна операція зі зрозумілим кодом відповіді, її просто ретраїти й логувати.

Обмеження — надлишковість: щоб зібрати картку товару, клієнт робить кілька звернень, і на повільній мережі це помітно.

Де GraphQL виграє

GraphQL віддає клієнту рівно запитаний набір полів — один запит замість трьох-чотирьох, і обсяг відповіді падає в рази. Це помітно на мобільних: сторінка каталогу завантажується швидше, бо не тягне описи й галереї, які на екрані не показуються.

Плата — лише читання та необхідність обмежувати глибину запитів, інакше один неакуратний клієнт навантажує базу.

Коли виправданий кастомний ендпоінт

Кастомний ендпоінт потрібен, коли штатні режими не виражають бізнес-логіку: ціна залежить від сегмента клієнта, доставка рахується за зовнішнім сервісом, потрібен агрегат із кількох джерел.

Такий ендпоінт дає чистий контракт, але стає частиною кодової бази — його потрібно тестувати й перевіряти під час кожного оновлення платформи.

На практиці ми фіксуємо схему обміну до початку робіт: які клієнти, які операції, який очікуваний обсяг. Це знімає половину проблем інтеграції ще на етапі проєктування.

Як ми налаштовуємо Magento 2 API: етапи робіт

Роботу починаємо з інвентаризації: збираємо всі точки, де зовнішні системи звертаються до магазину — мобільний застосунок, ERP, склад, маркетплейси, CRM.

За кожною фіксуємо, що саме вона запитує і як часто, щоб зрозуміти реальний профіль навантаження, а не орієнтуватися на припущення.

  1. Аудит API. Розбираємо поточні REST- і GraphQL-запити, шукаємо вузькі місця: запити без кешування, вибірки «все одразу», дублі викликів, відсутність обмеження частоти. На виході — карта інтеграцій із позначкою, що перевикористовуємо, що переписуємо, що виводимо з експлуатації.
  2. Проєктування ендпоінтів. Визначаємо, де вистачить штатного REST, де GraphQL дасть вибірку одним запитом замість трьох, а де потрібен кастомний ендпоінт під логіку конкретного партнера. Фіксуємо контракти: які поля, які коди відповідей, як віддаємо помилки.
  3. Налаштування та реалізація. Налаштовуємо права доступу за ролями, обмеження частоти запитів, кешування важких вибірок. Кастомні ендпоінти виносимо в окремий модуль, щоб оновлення ядра їх не затирало.
  4. Тестування інтеграцій. Проганяємо сценарії на тестовому контурі: коректні відповіді, відмови зовнішніх систем, повторні запити, пікові навантаження. Окремо перевіряємо, що при недоступності партнера магазин продовжує приймати замовлення.
  5. Документація API. Описуємо кожен ендпоінт: призначення, параметри, приклади запиту та відповіді, коди помилок. Документацію ведемо поряд із кодом, щоб вона не розходилася з реальністю після правок.
  6. Передача та спостереження. Показуємо команді замовника, як читати логи інтеграцій і де дивитися метрики відмов. Домовляємося про поріг, після якого ми повертаємося до доопрацювання.

Такий порядок дає передбачуваний результат: інтеграції перестають падати мовчки, а будь-яка нова система підключається за вже описаним контрактом, без перезбирання логіки з нуля.

Політики доступу, ролі та ліміти в API

Розмежування прав у Magento 2 API будується на інтеграціях: кожній видається своя пара ключів і набір дозволів із дерева ресурсів.

Токен доступу живе обмежений час, продовжується окремим запитом, а прив'язка до інтеграції дозволяє відкликати доступ точково — не перевипускаючи ключі для інших споживачів.

Так один і той самий API обслуговує і мобільний застосунок, і складську систему, і партнерський портал, не змішуючи їхні права.

Ролі описуємо через ACL-ресурси, а не через «адмін/не адмін». Інтеграція для вітринного кешу отримує лише читання каталогу, інтеграція для ERP — запис замовлень і залишків, аналітиці дістається вибірка без права змінювати дані.

Принцип найменших привілеїв тут не формальність: якщо ключ витече, збиток обмежений одним ресурсом, а не всією базою.

Ліміти запитів ставимо на трьох рівнях: на периметрі — за IP і ключем, на рівні застосунку — за інтеграцією, на рівні важких вибірок — окремо. Це захищає від вичерпання пулу з'єднань до бази, коли один неакуратний скрипт кладе вітрину. Сплесковий трафік від розпродажів гасимо чергою, а не відмовою в обслуговуванні.

Для GraphQL окремо обмежуємо глибину і складність запитів — інакше один вкладений запит на десяток рівнів вибирає каталог цілком. Логуємо кожен виклик з ідентифікатором інтеграції, щоб інцидент розбирався за фактами, а не за здогадками.

Працюємо з Magento в актуальній гілці — механізми ACL, токенів і тротлінгу там уже є, їх потрібно правильно сконфігурувати, а не винаходити поверх.

Підсумок: доступи видаються за задачею, ключі відкликаються без простою, а ліміти не дають одному споживачу уронити сервіс для решти.

Що замовник отримує після налаштування API

Після налаштування API замовник отримує не «працюючий ендпоінт», а комплект, за яким інтеграцію можна розвивати й підтримувати без автора. Нижче — що саме фіксується в передачі.

  • Документація API — опис усіх методів із прикладами запитів і відповідей, кодами помилок і лімітами. Розробник на боці замовника або новий підрядник підключається за нею, не читаючи вихідний код.
  • Схеми інтеграцій — які системи обмінюються даними, у який бік, з якою періодичністю і що відбувається при недоступності однієї зі сторін. Схема відповідає на питання «чому замовлення пішло в ERP двічі», не піднімаючи логи вручну.
  • Конфігурації середовищ — роздільні набори параметрів для тестового й робочого контурів, ключі доступу, права ролей API. Тестові запити не йдуть у бойові системи, а ключі не лежать у коді.
  • Регламенти підтримки — що моніториться, які помилки вважаються критичними, кому і як передається сигнал, хто і в які терміни реагує. Черговий бачить проблему до того, як її помітить клієнт.
  • Інструкції для команди — як додати новий метод, змінити структуру відповіді, відкотити невдалу зміну. Типові операції виконуються за кроками, без звернення до нас.
  • Набір автотестів — перевірки ключових сценаріїв обміну, які запускаються перед кожним релізом. Зміна в каталозі або оформленні замовлення не ламає інтеграцію непомітно.
  • Журнал змін — що і коли змінювалося в контракті API, які версії ще підтримуються, як перейти на нову. Оновлення на боці замовника не перетворюються на сюрприз для суміжних систем.

Окремо проговорюємо межі: які ендпоінти публічні, які закриті авторизацією, де стоять обмеження за частотою запитів. Це знімає більшу частину питань «чому нам відмовили в доступі» ще до першого звернення.

Опишіть задачу — повернемося з оцінкою та планом: які артефакти потрібні саме вашому контуру і в якому обсязі.

Чим відрізняється REST від GraphQL у Magento 2 API?

REST у Magento 2 — це ресурсна модель: кожен тип сутності (товар, категорія, замовлення, клієнт) доступний за своєю адресою, а вибірка керується параметрами запиту.

Відповідь надходить повністю в тому вигляді, у якому її віддає сервісний шар, тому клієнт не може попросити «лише ім'я, ціну та залишок» — він отримує весь об'єкт і відкидає зайве на своєму боці.

Для одиночних операцій та інтеграцій «записати/прочитати» це передбачувано й зручно: кешування на рівні HTTP, зрозумілі коди відповідей, просте налагодження через звичайний HTTP-клієнт.

GraphQL у Magento 2 вирішує інше завдання — він будується навколо потреб вітрини. Клієнт описує в запиті рівно ті поля, які йому потрібні, і отримує одну відповідь замість ланцюжка звернень до кількох ендпоінтів.

Це критично для вітрин на React, Vue та мобільних застосунків, де важливі час до першого рендерингу та обсяг трафіку.

Зворотний бік — жорсткі обмеження: GraphQL у ядрі орієнтований на читання, частина адміністративних і записувальних операцій через нього недоступна, а складні запити потребують контролю глибини та вартості, інакше один необережний запит лягає на базу важким сканом.

Вибір підходу — це не «що сучасніше», а «який профіль навантаження».

REST виграє там, де потрібні масові операції, інтеграції з обліковими системами, обмін із зовнішніми сервісами та адміністрування: він дає повний доступ до сервісного шару й передбачувано масштабується за кількістю воркерів.

GraphQL виграє на вітрині: менше мережевих раундів, менше перевантаження каналів, гнучка вибірка під конкретний екран.

На практиці найсильніше працює гібрид — GraphQL для вітрини та мобільних клієнтів, REST для інтеграцій і службових сценаріїв, зі спільним шаром бізнес-логіки під обома.

Окремо варто згадати кастомні ендпоінти. Коли штатних маршрутів не вистачає — наприклад, потрібна агрегація даних із кількох джерел або специфічна бізнес-операція — ми додаємо свій маршрут у модуль і виносимо логіку в сервісний шар, а не в контролер.

Такий ендпоінт перевикористовує наявні репозиторії та не дублює правила, а отже, не розходиться з рештою системи при змінах.

Рішення про те, розширювати REST, додавати схему в GraphQL чи робити окремий маршрут, ухвалюється за завданням, а не за звичкою — від цього залежить і швидкість вітрини, і вартість підтримки.

Кейс: прискорення обміну даними із зовнішніми системами

Що було до

У замовника — інтернет-магазин на Magento 2 з обміном даними між складом, обліковою системою та вітриною. Каталог і залишки синхронізувалися нічним пакетним завданням: вивантаження тривало кілька годин, а між запусками дані на вітрині розходилися з фактичною наявністю.

Покупець оформлював замовлення на товар, якого вже немає, менеджери вручну знімали позиції, а частина замовлень скасовувалася постфактум.

Гіршою була друга проблема — клас помилок. Штатний REST-ендпоінт віддавав весь об'єкт товару цілком, включно з десятками невикористовуваних атрибутів і зв'язків.

Під час масового вивантаження це давало навантаження на базу, таймаути та «плаваючі» збої: частина запитів відвалювалася за часом, і обмін завершувався частково. Відстежити, які саме позиції не доїхали, було майже неможливо — журнал фіксував лише факт збою.

Що змінили

Ми перевели обмін з пакетного на подієвий і переписали точки доступу до даних. Замість одного важкого REST-запиту на весь каталог зробили вибірку через GraphQL: клієнт запитує рівно ті поля, які потрібні складу та обліковій системі, — залишки, ціни, ідентифікатори.

Обсяг даних, що передаються на одну операцію, скоротився в рази, а час відгуку на типовий запит упав з кількох секунд до часток секунди.

Для нестандартних сценаріїв — приймання поставок і звіряння партій — додали кастомні ендпоінти з власною валідацією вхідних даних. Кожен запит тепер або проходить цілком, або відхиляється зі зрозумілою помилкою, без частково застосованих змін.

Це прибрало сам клас «половинчастих» обмінів: розходжень, які раніше спливали через добу, більше не виникає.

Що стало

Обмін між системами йде в реальному часі, а не раз на добу: залишки на вітрині збігаються з фактичними в момент оформлення замовлення. Скасування через відсутній товар практично зникли, ручна правка позицій менеджерами більше не потрібна.

Навантаження на базу в години пік знизилося, бо зникли важкі нічні вивантаження та зайві вибірки невикористовуваних полів.

Окремий результат — передбачуваність збоїв. Помилки інтеграції тепер приходять із зазначенням конкретної сутності та причини, а не «обмін не пройшов». Черговий інженер бачить проблему до того, як її помітить покупець, і усуває її точково.

Часті технічні сумніви щодо API

REST і GraphQL у Magento 2 співіснують, а не замінюють одне одного: REST залишається для адміністративних операцій, інтеграцій з обліковими системами та вебхуків, GraphQL — для вітрини, де важливо отримати одним запитом товар, ціни, залишки та контент без серії послідовних викликів.

Сумісність забезпечується на рівні сервісних контрактів: поки модуль оголошує інтерфейси й не ламає їхні сигнатури, обидва шари працюють поверх однієї бізнес-логіки, і додавання кастомного ендпоінта не вимагає переписувати наявні.

Ми вже використовуємо REST — перехід на GraphQL зламає поточні інтеграції?

Ні, шари не конфліктують. GraphQL підключається як окремий транспорт поверх тих самих сервісних контрактів, а старі REST-маршрути продовжують відповідати.

Міграцію робимо поетапно: спочатку вітринні сценарії, потім другорядні, з паралельною роботою обох шарів і перевіркою відповідей на ідентичність даних.

Як зрозуміти, що API витримає пікове навантаження?

Проганяємо навантажувальне тестування на профілі, наближеному до бойового: масові вибірки каталогу, оформлення замовлення, синхронізація залишків.

Дивимося не середній час відповіді, а поведінку на 95-му процентилі та при відмовах зовнішніх сервісів — саме там проявляються неоптимізовані запити й блокування. За результатами додаємо кешування та обмеження частоти звернень.

Що робити з інтеграціями, які писав не наш розробник?

Починаємо з інвентаризації: які ендпоінти викликаються, з якою частотою, які поля читаються й записуються. Далі фіксуємо контракт тестами — так зміна внутрішньої логіки не ламає чужу інтеграцію непомітно.

Підтримка зводиться до регламенту: версіонування маршрутів, журналювання викликів і зрозумілий порядок відкату при збої.

Як відкотити невдалу зміну API?

Контракти версіонуються, старі маршрути зберігаються на період переходу, тому відкат — це повернення попередньої версії модуля без правок на боці споживачів. Перед викаткою проганяємо набір перевірок на сумісність, щоб відкат був усвідомленим рішенням, а не реакцією на інцидент.

Обговоримо ваше завдання щодо API

Щоб оцінка була предметною, а не «плюс-мінус», нам потрібен мінімум контексту: які системи споживають дані, які операції критичні, чи є обмеження щодо навантаження та строків.

Із цим ми розберемо поточні ендпоінти, схеми та права доступу й повернемося з планом робіт, де кожен етап прив’язаний до результату.

  • Розбір поточного API: які REST- і GraphQL-запити вже використовуються, де дублюються виклики та які ендпоінти гальмують відгук вітрини.
  • Схема інтеграцій: карта споживачів — мобільний застосунок, ERP, склад, маркетплейси — і того, які дані кожен із них тягне та як часто.
  • Оцінка обсягу: перелік ендпоінтів під доопрацювання або створення, пріоритети за впливом на бізнес-процеси.
  • План робіт за етапами: проєктування контрактів, реалізація, тести, навантажувальна перевірка, виведення в продакшн.
  • Політика доступу та безпеки: токени, ролі, обмеження за методами та ліміти запитів.
  • Схема відкату: як повернути попередню версію контракту без простою для споживачів.
  • Склад документації: опис ендпоінтів, приклади запитів і відповідей, регламент змін.

Опишіть завдання — які системи потрібно зв’язати та що зараз заважає — і ми повернемося з оцінкою API та планом робіт. Далі узгодимо етапи та приступимо.

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1060