Simplit.io змінює принцип взаємодії клієнта та сервера.
Для взаємодії з зовнішнім світом, багато хмарних сервісів використовують REST API. У цього методу є як переваги, так і недоліки.
HTTP-з'єднання є умовно-постійним і після відповіді на запит клієнта сервер розриває з'єднання.
Для підтримки HTTP-з'єднання використовуються різні хакі - chunked, streaming. А для емуляції асинхронних викликів використовується механізм WebHooks.
Simplit.io вирішує ці проблеми кардинально - сервіс перетворює REST на Realtime. Клієнт отримує постійне WebSocket-з'єднання, а дані, що передаються, конвертуються у формат, зрозумілий для хмарного сервісу.
В якості додаткового бонуса, Simplit.io зменшує overhead. Детальне порівняння можна прочитати у статті REST vs WebSocket
При звичайному підході клієнт з певною періодичністю "бомбить" запитами REST API хмарного сервісу,
ставлячи одні й самі питання:
«Чи є щось нове?»
А так як більшість REST API хмарних сервісів використовують механізм WebHook, то клієнту доводиться "бомбити" запитами ще й власну базу даних: «Чи є новий WebHook?»
Крім того, на стороні клієнта має бути встановлений веб-сервер (Apache, IIS), який налаштований для прийняття WebHooks.
Всю «чернову» роботу виконує Simplit.io, а клієнт отримує вже готові Push-повідомлення.
Клієнт використовує лише одне WebSocket-з'єднання. Застосовується чистий WebSocket (RFC 6455) без будь-яких надбудов.
Для обміну даними використовується формат JSON. Протокол передачі гранично простий.
Пакет запиту:
{
"service": "service_name",
"data": {...}
}
Пакет ответа / события:
{
"service": "service_name",
"event": "event_name",
"data": {...}
}
Общий формат запросов
{
"service": "service_name",
"data": {...}
}
service
- (обов'язковий), ім'я сервісуdata
- (обов'язковий), дані які відправляються сервісуdata
:
Склад параметра data
залежить від потреб REST API кінцевого сервісу. Частина параметрів є опціональними.
{
"url": "",
"header": {},
"method": "",
"data": ""
}
url
- (обов'язковий для REST), URL для запиту до REST-сервісуheader
- (необязательный), дод. параметри заголовку запиту до REST в форматі {"key":"value"}
method
- (обов'язковий), метод для REST: [get,post,put,delete]
, для WS: [connect,command]
data
- (обов'язковий), данні в тому вигляді, який потребує кінцевий сервіса. Допустиме порожнє значення.Загальний формат подій
{
"service": "service_name",
"event": "event_name",
"data": {...}
}
service
- (обов'язковий), ім'я сервисаevent
- (обов'язковий), ім'я подіїdata
- (обов'язковий), отримані даніНижче наведено пакети запитів до хмарних сервісів.
{
"service": "zadarma",
"data": {
"url": "https://api.zadarma.com/v1/info/balance/?format=json",
"header": {"Authorization": "API_KEY:NGU14NTUxNDFhNWE0YMzY1YTY1Mg=="},
"method": "POST",
"data":""
}
{
"service": "mango",
"data": {
"url": "https://app.mango-office.ru/vpbx/stats/request",
"header": {"Content-type":"application/x-www-form-urlencoded"},
"method": "POST",
"data":"vpbx_api_key=%3C_API_KEY_%3E&sign=12345665d77481b86e&json=%7B%22date_from%22%3A%221445288400%22%2C%22date_to%22%3A%221445374859%22%7D"
}
{
"service": "onpbx-rest",
"data": {
"url": "https://api.onlinepbx.ru/simplit.onpbx.ru/user/get.json",
"header":
{"x-pbx-date": "2016-01-11 14:05:02",
"Accept": "application/json",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8;",
"Content-MD5": "d41d8cd98f00b204e9800998ecf8427e",
"x-pbx-authentication": "KEY_ID:NmI0ZGViYWY4MWM2Yg=="},
"method": "POST",
"data":""
}