Streaming API у Salesforce — це інструмент, що дозволяє клієнтським додаткам отримувати оновлення даних у реальному часі. Він усуває потребу в періодичному опитуванні серверів, забезпечуючи ефективну роботу системи і підвищуючи продуктивність інтеграцій. У цій статті ми розглянемо, як працює Streaming API, його сучасні компоненти, сфери використання, а також основні етапи впровадження.
Що таке Streaming API?
Streaming API дозволяє клієнтам підписуватись на події Salesforce і отримувати повідомлення про зміни в системі. Основні компоненти Streaming API:
- Сервер Salesforce публікує події.
- Клієнтський додаток підписується на ці події через постійне з’єднання.
- CometD реалізує протокол Bayeux, забезпечуючи обмін повідомленнями у реальному часі.
- Long Polling підтримує активне з’єднання між клієнтом і сервером.
Історія: Від PushTopic до сучасних рішень
Раніше основним механізмом Streaming API був PushTopic Events, що дозволяв підписуватись на зміни через SOQL-запити. Однак із часом він втратив актуальність через обмежену функціональність:
- Неможливість відстеження видалення чи відновлення записів.
- Обмежена масштабованість.
- Вузька інтеграція з бізнес-процесами.
Сучасні інструменти — Change Data Capture (CDC) та Platform Events — стали гідною заміною:
- CDC ідеально підходить для автоматичного відстеження змін у даних.
- Platform Events дозволяє створювати події з кастомною логікою для інтеграцій.
Як працює Streaming API?
Streaming API використовує модель публікації-підписки, що складається з таких етапів:
- Handshake (Початкове підключення):
- Клієнт ініціалізує з’єднання із сервером Salesforce через CometD.
- Salesforce підтверджує встановлення з’єднання.
- Підписка на Канал:
- Клієнт підписується на певний канал:
- Для CDC це
/data/<ObjectName>ChangeEvent
.
* Для Platform Events —
/event/<PlatformEventName>__e
.
- Отримання Подій:
- Salesforce надсилає повідомлення клієнту при зміні даних або створенні події.
- Автоматичне Відновлення Підключення:
- У разі збою клієнт автоматично повторно підключається до сервера.
Коли використовувати Change Data Capture або Platform Events?
Change Data Capture (CDC):
CDC найкраще підходить для сценаріїв, де необхідно автоматично відстежувати всі зміни в об’єктах Salesforce, включаючи створення, оновлення, видалення чи відновлення записів.
Use cases CDC:
- Синхронізація даних: Наприклад, синхронізація записів Salesforce із зовнішньою базою даних.
- Моніторинг змін: Відстеження змін у статусах замовлень чи записів клієнтів.
- Міграція даних: Реагування на зміни в даних у реальному часі для автоматизації міграції.
Platform Events:
Platform Events використовуються для створення подій із кастомною логікою, які не прив’язані до конкретного об’єкта Salesforce.
Use cases Platform Events:
- Складні інтеграції: Наприклад, обмін даними між Salesforce і зовнішніми ERP-системами.
- Автоматизація процесів: Генерація подій для запуску кастомних робочих процесів.
- Оркестрація мікросервісів: Координація роботи кількох систем через події.
Реалізація Streaming API для Розробників
Налаштування Change Data Capture (CDC)
Щоб активувати CDC:
- Перейдіть до Setup → Change Data Capture.
- У списку доступних об’єктів виберіть ті, зміни яких потрібно відстежувати (наприклад, Account, Contact).
- Збережіть налаштування.
Після активації CDC для об’єкта створюється канал /data/ChangeEvent, який використовується для підписки.
Налаштування Platform Events
Щоб створити Platform Event:
- Перейдіть до Setup → Platform Events.
- Натисніть New Platform Event.
- Вкажіть назву події (наприклад, OrderProcessed) і необхідні поля.
- Збережіть налаштування.
Після створення події для неї автоматично генерується канал /event/PlatformEventName__e.
Код клієнтської інтеграції
Підключення до CDC (Node.js):
const cometdLib = require('cometd');
const cometd = new cometdLib.CometD();
const salesforceUrl = 'https://<your_instance>.salesforce.com/cometd/54.0';
const accessToken = '<your_access_token>';
cometd.configure({
url: salesforceUrl,
requestHeaders: {
Authorization: `Bearer ${accessToken}`
}
});
cometd.handshake((handshakeReply) => {
if (handshakeReply.successful) {
console.log('Handshake успішний!');
cometd.subscribe('/data/AccountChangeEvent', (message) => {
console.log('Отримано подію:', JSON.stringify(message));
});
} else {
console.error('Помилка handshake:', handshakeReply);
}
});
Публікація Platform Event через Apex:
MyCustomEvent__e event = new MyCustomEvent__e();
event.CustomField__c = 'Test Data';
EventBus.publish(event);
System.debug('Подія опублікована: ' + event);
Найкращі Практики для Використання Streaming API
- Ефективне управління підписками:
- Уникайте надлишкових підписок.
- Регулярно перевіряйте і видаляйте непотрібні канали.
- Масштабованість:
- Для великих обсягів подій інтегруйте зовнішні системи обробки, такі як Kafka або AWS SQS.
- Безпека:
- Використовуйте OAuth для авторизації.
- Обмежуйте доступ до каналів через Permission Sets.
- Обробка помилок:
- Реалізуйте повторне підключення клієнта при збоях.
- Логування допоможе швидко ідентифікувати проблеми.
Висновок
Streaming API відкриває нові можливості для інтеграцій у реальному часі. Якщо раніше PushTopic Events був основним інструментом роботи з подіями, сьогодні Change Data Capture і Platform Events забезпечують більшу гнучкість, масштабованість та простоту у використанні.
- CDC ідеально підходить для автоматичного відстеження змін у даних.
- Platform Events дозволяє створювати кастомні події для складних інтеграцій.
Дотримання найкращих практик, таких як правильне управління підписками, масштабованість і безпека, забезпечить стабільну та ефективну роботу з API навіть у складних сценаріях. Streaming API є ключовим інструментом для побудови сучасних, інтегрованих рішень на платформі Salesforce.