poll.gmod.app документация
Этот пост немного устарел, но он уже переписан и актуализирован тут 👈 Рекомендую сразу читать статью по ссылке
- Все упоминания
poll.gmod.app
в этом посте заменены наpoll.def.pm
(но оба домена рабочие в демо режиме)
Это простейший Long Polling микросервис, который выступает в качестве своеобразного WebHook сервера для POST запросов. Принятые данные можно получить с сервера по GET запросу.
Рассчитан для ограниченной среды, где усложнена или отсутствует возможность поднятия Web сервера для своих вебхуков.
Рекомендую прочесть это, если вы представляете LongPolling как GET запрос раз в 10 секунд (это не так).
Одной этой схемы достаточно, чтобы понять как все работает на примере Telegram бота
В недавнем посте рассказаны варианты применения этого сервиса. Рекомендую поч итать: Webhook без веб сервера
API
Мы хотели сделать максимально простой API, поэтому нет никаких токенов, паролей, регистраций. Все данные считаются публичными (любой может прочесть или записать), но вы можете спрятать их, подставив вместо SECRET_UID что-то вроде пароля или токена.
Больше ничего. Почти. У GET запроса есть возможность указания некоторых параметров, но сначала покажу пример ответа от GET запроса
Возвращается массив с полями ok, ts и updates. Обратите внимание на ts, он пригодится для формирования GET запроса
- ?ts=12345. Это offset. Его нужно обновлять каждый раз, когда вы получаете новый апдейт. Без этого параметра каждый раз будут возвращаться все последние апдейты, а следующий параметр sleep не будет обрабатываться, потому что сервер решит, что возвращает вам что-то новое
- ?sleep=60 , default 0, max 60. Время ожидания появления обновлений на сервере. Это время poll.def.pm будет как бы "висеть". На самом деле он будет удерживать соединение, пока не появятся новые данные или не истечет указанный срок. Без указания sleep смысла с Long Polling мало, ведь суть как раз в удержании соединения до появления данных. После получения данных или сброса по таймауту можно смело заново выполнять GET запрос. sleep=60 означает 1 GET запрос в минуту.
Определение какой сервис прислал апдейт
POST запрос может принять любые параметры. Они будут добавлены в каждый update объект, что полезно для идентификации сервиса, с которого пришел апдейт, если вы указываете один webhook на нескольких сервисах. Например, для определения какой телеграм бот прислал апдейт, я задаю каждому боту вебхук в таком стиле: /setWebhook?url=https://poll.def.pm/myS3cretU1D?botname=video_thumbnails_bot
.
Теперь на GET https://poll.def.pm/myS3cretU1D в каждом таком апдейте будет поле botname=video_thumbnails_bot