Server API
У центрифуги есть два варианта работы с API: HTTP и GRPC
Будет рассмотрен только HTTP вариант
Чтобы использовать апи нужно в нем аутентифицироваться
Для этого в заголовке нужно передать api_key из конфига
Authorization: apikey <KEY>
В теле запроса нужно передать json с двумя обязательными сущностями:
-
method
- имя вызываемой команды -
params
- опции этой команды (у каждой свои)
{
"method": "info",
"params": {}
}
Получается такая штука:
? curl -s -X POST --header "Authorization: apikey f71f267a-423b-4d10-a080-8f00bf9bc811" \
--data '{"method": "info", "params": {}}' http://51.250.23.143:8000/api | jq | head -n 20
{
"result": {
"nodes": [
{
"uid": "b1499040-5927-4ffc-af9c-f6111b71ec53",
"name": "centrifugo_8000",
"version": "3.2.0",
"num_clients": 2,
"num_users": 1,
"num_channels": 1,
"uptime": 10793,
"metrics": {
"interval": 60,
"items": {
"centrifugo.api.command_duration_seconds.count.method.info.protocol.http": 10,
"centrifugo.api.command_duration_seconds.quantile.50.method.info.protocol.http": 5.174e-06,
"centrifugo.api.command_duration_seconds.quantile.99.method.info.protocol.http": 1.6736e-05,
"centrifugo.api.command_duration_seconds.quantile.999.method.info.protocol.http": 1.6736e-05,
"centrifugo.api.command_duration_seconds.sum.method.info.protocol.http": 6.281499999999905e-05,
"centrifugo.client.command_duration_seconds.count.method.connect": 0,
...
Методы
-
publish - позволяет заслать данные в канал (самый частоиспользуемый)
{ "method": "publish", "params": { "channel": "channel", "data": { /* в data можно положить json */ "value": "hello" } } }
- broadcast - то же что и publish, но можно передать список каналов, а не один
- subscribe/unsubscribe - подписывание/отписываение пользователей на каналы
-
disconnect - гасит все сессии пользователя (пользователь - токен - айди)
? cat /tmp/centrifugo.data { "method": "disconnect", "params": { "user": "1" } } ? curl -s -X POST --header "Authorization: apikey f71f267a-423b-4d10-a080-8f00bf9bc811" --data '@/tmp/centrifugo.data' http://51.250.23.143:8000/api
- refresh - (не понял прикола)
-
presence - показывает стату по каналу (всех текущих подписчиков канала)
По умолчанию эта функция выключена, потому что грузит центрифугу, чтобы включить, надо в конфиг прописатьpresence: true
, после этого начинает работать такая штука:? cat /tmp/centrifugo.data { "method": "presence", "params": { "channel": "channel" } } ? curl -s -X POST --header "Authorization: apikey f71f267a-423b-4d10-a080-8f00bf9bc811" --data '@/tmp/centrifugo.data' http://51.250.23.143:8000/api | jq { "result": { "presence": { "3eb68cd6-1194-4009-944a-917a0b58c897": { "user": "1", "client": "3eb68cd6-1194-4009-944a-917a0b58c897" }, "7097cc0e-8d07-466c-aa69-7bee6ef14d08": { "user": "1", "client": "7097cc0e-8d07-466c-aa69-7bee6ef14d08" } } } }
-
presence_stats - то же что выше но кратко (чисто числа)(так же требуется опция в конфиге)
? cat /tmp/centrifugo.data { "method": "presence_stats", "params": { "channel": "channel" } } ? curl -s -X POST --header "Authorization: apikey f71f267a-423b-4d10-a080-8f00bf9bc811" --data '@/tmp/centrifugo.data' http://51.250.23.143:8000/api | jq { "result": { "num_clients": 2, "num_users": 1 } }
-
history - история
В конфиге делаем так:
В апи делаем так:root@centrifugo:~# tail -n 2 /etc/centrifugo/config.yaml history_size: 10 history_ttl: 60s
? cat /tmp/centrifugo.data { "method": "history", "params": { "channel": "channel", "limit": 3 } } ? curl -s -X POST --header "Authorization: apikey f71f267a-423b-4d10-a080-8f00bf9bc811" --data '@/tmp/centrifugo.data' http://51.250.23.143:8000/api | jq { "result": { "publications": [ { "data": { "value": "07fbacc688715758ebe21b8f71bfde---ty pidor---" }, "offset": 85 }, { "data": { "value": "62b5942b6aabb2aa53df28074c1b83---ty pidor---" }, "offset": 86 }, { "data": { "value": "5382002b3f86adf92d9c32cc605cb7---ty pidor---" }, "offset": 87 } ], "epoch": "txQb", "offset": 94 } }
-
history_remove - позволяет удалять историю
Проверяем текущую историю:
Удаляем историю:? curl -s -X POST --header "Authorization: apikey f71f267a-423b-4d10-a080-8f00bf9bc811" --data '{"method": "history","params": {"channel": "channel","limit": 2}}' http://51.250.23.143:8000/api | jq { "result": { "publications": [ { "data": { "value": "98122dbb14af6a6655642e0dbdd040---ty pidor---" }, "offset": 496 }, { "data": { "value": "927a91158d3458a10b0bb56cd1c156---ty pidor---" }, "offset": 497 } ], "epoch": "txQb", "offset": 503 } }
Начинаем проверять (два раза, сразу и спустя время, потому что значения в канале обновляются раз в несколько секунд)? cat /tmp/centrifugo.data { "method": "history_remove", "params": { "channel": "channel" } } ? curl -s -X POST --header "Authorization: apikey f71f267a-423b-4d10-a080-8f00bf9bc811" --data '@/tmp/centrifugo.data' http://51.250.23.143:8000/api
? curl -s -X POST --header "Authorization: apikey f71f267a-423b-4d10-a080-8f00bf9bc811" --data{"method": "history","params": {"channel": "channel","limit": 2}}' http://51.250.23.143:8000/api | jq { "result": { "publications": [], "epoch": "txQb", "offset": 504 } } ? curl -s -X POST --header "Authorization: apikey f71f267a-423b-4d10-a080-8f00bf9bc811" --data '{"method": "history","params": {"channel": "channel","limit": 2}}' http://51.250.23.143:8000/api | jq { "result": { "publications": [ { "data": { "value": "2033bac26a0c3a6ec00b0cb717143f---ty pidor---" /* Опа! Появилось! */ }, "offset": 505 } ], "epoch": "txQb", "offset": 505 } }
-
channels - показывает активные каналы (с 1+ подписчиком)
? cat /tmp/centrifugo.data { "method": "channels", "params": {} /* тут правда пусто */ } ? curl -s -X POST --header "Authorization: apikey f71f267a-423b-4d10-a080-8f00bf9bc811" --data '@/tmp/centrifugo.data' http://51.250.23.143:8000/api | jq { "result": { "channels": { "channel": { "num_clients": 2 } } } }
- info - не имеет параметров как предыдущий метод и выдает инфу про ноды
No Comments