Інтеграція Laravel через API — це не лише HTTP-запит до зовнішнього сервісу. У production потрібно врахувати авторизацію, формат даних, повторні події, обмеження швидкості, тимчасову недоступність і відновлення обміну після помилки.
Платіжна система, CRM, служба доставки або маркетплейс працюють незалежно від вашого застосунку. Вони можуть повільно відповісти, повернути тимчасову помилку чи повторно надіслати webhook. Надійна інтеграція має очікувати таку поведінку й обробляти її без втрати та дублювання даних. Build Zone створює Laravel-проєкти та інтеграції для наявних систем.
Починайте з контракту даних
Визначте джерело істини
Якщо ціну можна змінювати і в Laravel, і в CRM, потрібне правило вирішення конфлікту. Без нього останній запит випадково перезаписуватиме дані незалежно від їхньої правильності. Для кожної сутності треба визначити, де вона створюється, хто може її змінювати, у якому напрямку йдуть зміни та за яким ключем зіставляються записи.
SKU часто використовують для товарів і варіантів, але він придатний лише тоді, коли значення унікальне й стабільне. Доцільно також зберігати ідентифікатор запису зовнішньої системи.
Опишіть формат запиту й відповіді
API-контракт має фіксувати назви полів, типи, формат дат, валюту, часову зону, допустимі статуси та структуру помилок. Перетворення зовнішнього формату у внутрішню модель краще зосередити в окремому шарі, а не розподіляти між контролерами, командами й helper-функціями.
До написання коду погодьте напрямки обміну, обов'язкові поля, правила конфлікту та очікувану поведінку під час недоступності зовнішнього сервісу.
Архітектура Laravel-інтеграції
API-клієнт і сервісний шар
Роботу з конкретним сервісом варто зосередити в окремому клієнті. Він відповідає за базову адресу, авторизацію, заголовки, timeout, серіалізацію та розбір відповіді. Бізнес-логіка не повинна знати, як формується Bearer-заголовок або який endpoint використовується для оновлення клієнта.
Сервісний шар координує сценарій: завантажує локальні дані, викликає API-клієнт, зберігає зовнішній ідентифікатор і фіксує результат синхронізації. Такий поділ спрощує тести — реальний HTTP-клієнт можна замінити контрольованою відповіддю.
Черги та планувальник
Зовнішній API не варто викликати всередині запиту користувача, якщо його відповідь не потрібна негайно. Передачу замовлення в CRM, повідомлення або масове оновлення каталогу можна виконувати в черзі. Користувач швидше отримує відповідь, а невдале завдання можна повторити.
Laravel Scheduler підходить для періодичного імпорту статусів і залишків. Однакові операції потрібно захистити від одночасного запуску, особливо якщо попередня синхронізація ще триває.
Webhook
Webhook повідомляє про подію без постійного опитування API. Endpoint має швидко перевірити запит, зафіксувати подію й передати важку обробку в чергу. Відправник може повторити webhook, якщо не отримав очікувану відповідь, тому повтор тієї самої події не повинен створювати друге замовлення або повторно змінювати залишок.
Безпека API-інтеграції
API-ключі, OAuth-токени й webhook-секрети не можна записувати в Git, клієнтський JavaScript або відкритий лог. Серверні секрети зберігають у змінних середовища чи спеціальному сховищі. Якщо токени різних підключень мають бути в базі, їх шифрують і обмежують доступ.
- видавайте ключу лише необхідні дозволи;
- використовуйте окремі ключі для різних середовищ;
- передавайте дані тільки через захищене з'єднання;
- перевіряйте підпис, час та ідентифікатор webhook-події;
- валідуйте типи, обов'язкові поля й допустимі значення;
- не записуйте токени та зайві персональні дані в журнали.
Навіть авторизований клієнт може надіслати неповний payload. Валідація та перевірка прав потрібні для кожного вхідного запиту, а не лише для публічної форми.
Як уникнути дублів і пережити помилки
Ідемпотентність означає, що повторне виконання тієї самої операції не створює новий результат. Для вхідної події зберігають її зовнішній ідентифікатор. Для вихідного запиту використовують idempotency key, якщо сервіс його підтримує, або локальний запис операції з унікальним обмеженням.
Номер телефону чи email не є надійним ключем замовлення: один клієнт може купувати кілька разів. Практичний розбір наведено у матеріалі про передачу замовлень OpenCart у KeyCRM.
Кожен зовнішній запит повинен мати timeout. Повторювати варто тимчасові мережеві помилки, обмеження швидкості або збої сервера, але не помилку валідації незмінного payload. Між спробами потрібна пауза зі збільшенням інтервалу; заголовок Retry-After, якщо він є, слід врахувати.
Після вичерпання спроб завдання не повинно зникати. Його переводять до списку невдалих операцій, де причину можна дослідити й повторити обробку після виправлення.
Ліміти API та великі обсяги
Зовнішні сервіси обмежують частоту запитів. Інтеграція має враховувати rate limit, використовувати пагінацію та не створювати неконтрольовані паралельні запити. Великі каталоги обробляють частинами, а позицію синхронізації зберігають, щоб після помилки продовжити роботу.
Якщо потрібно отримувати лише зміни, краще використовувати дату модифікації, cursor, журнал подій або webhook, а не щоразу завантажувати весь каталог. Для інтеграцій з CRM корисний матеріал про синхронізацію залишків через API. Якщо магазин залишається на OpenCart, доступний готовий модуль KeyCRM.
Моніторинг, відновлення й тести
Успішна HTTP-відповідь не завжди означає завершену бізнес-операцію. Для синхронізації корисно зберігати напрямок, локальний і зовнішній ідентифікатори, час спроби, статус, контрольований опис помилки й correlation ID. Критичні збої мають створювати повідомлення відповідальній людині.
Окремо потрібна періодична звірка: чи всі замовлення мають зовнішній запис, чи збігаються статуси та чи не залишилися операції в проміжному стані.
Тести повинні охоплювати успішну відповідь, помилку авторизації, невалідні дані, timeout, rate limit, тимчасову помилку сервера, повторний webhook і повторний запуск фонового завдання. Laravel дозволяє підміняти HTTP-відповіді, черги й події, тому більшу частину поведінки можна перевірити без production API.
Поширені запитання
Чи можна інтегрувати Laravel з будь-яким сервісом?
Якщо сервіс має документований API, webhook або інший доступний спосіб обміну, інтеграцію зазвичай можна спроєктувати. Реальні можливості залежать від контракту платформи.
Що краще: webhook чи опитування API?
Webhook швидше повідомляє про подію, а опитування простіше контролювати. Часто їх поєднують: webhook для оперативних змін, періодичну звірку — для відновлення пропущених даних.
Навіщо черга, якщо API відповідає швидко?
Швидкість може змінитися. Черга відокремлює зовнішній сервіс від запиту користувача й дозволяє контрольовано повторити тимчасово невдалу операцію.
Як не створювати дублікати замовлень?
Зберігайте унікальний ідентифікатор події, використовуйте idempotency key і додайте унікальне обмеження на рівні бази.
Чи можна виправити вже наявну інтеграцію?
Так. Роботу можна почати з аудиту коду, контракту, журналів і поточних помилок, а потім визначити обсяг локального виправлення або перебудови інтеграційного шару.
Потрібна інтеграція Laravel через API?
Надішліть посилання на API-документацію, приклад даних і короткий опис потрібного обміну. Я проаналізую контракт і запропоную архітектуру з урахуванням безпеки, повторів та моніторингу.