Info
Content

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
Back to top