Home - instasport/club-api GitHub Wiki

Интерфейс системы Instasport (API)

Система Instasport имеет GraphQL интерфейс, который позволяет подключаться к ней для интеграции с другими сервисами (например с сайтом клуба или из мобильного приложения). Что такое GraphQL можно почитать здесь:

Введение в GraphQL: что это за язык и как использовать его под Android

Для получения информации через API (например: узнать расписание тренировок или получить список абонементов) или регистрации/авторизации клиента необходимо знать, как клуб зарегистрирован в системе (Club Slug) и иметь ключ доступа (API Key).

Club Slug и API Key можно получить у администратора Instasport после регистрации клуба в системе.

Для совершения каких-либо действий от имени клиента (например: записаться на тренировку или купить абонемент) нужно авторизоваться в системе и получить токен доступа (access token).

Все функции доступны по единому адресу - https://instasport.co/api/ и все запросы делаются с помощью POST

Пример использования интерфейса

Для примера получим название клуба. В заголовке авторизации нужно указать Club Slug и API Key

slug - test
key - Ajsgwf3SLdcGpiXLPpzc29poWermmEkR6/xNqkS4onk=

Указанный ключ, позволяет получить доступ к тестовому клубу. На Python 3 запрос можно сформировать таким образом:

import requests
slug = "test"
key = "Ajsgwf3SLdcGpiXLPpzc29poWermmEkR6/xNqkS4onk="
payload = {"query": "{ club {title} }"}
r = requests.post('https://instasport.co/api/', headers={"Authorization": f"Key {key} {slug}"}, data=payload)
print(r.json())

Ответ:

{
  "data": {
    "club": {
      "title": "Клуб №1 Fight Club"
    }
  }
}

Из командной строки:

curl -X POST -H "Content-Type: application/json" -H "Authorization: Key Ajsgwf3SLdcGpiXLPpzc29poWermmEkR6/xNqkS4onk= test" --data '{ "query": "{ club {title} }" }' https://instasport.co/api/

Ответ:

{"data":{"club":{"title":"\u041a\u043b\u0443\u0431 \u21161 Fight Club"}}}

Отладка запросов в браузере

Чтобы лучше понять, как использовать GraphQL можно воспользоваться отладчиком запросов:

GraphQL Playground

Сам запрос пишется слева в большом окне

query Club {
  club {
    title
  }
}

Чтобы ввести заголовок авторизации нужно слева внизу выбрать HTTP HEADERS и ввести

{"Authorization": "Key Ajsgwf3SLdcGpiXLPpzc29poWermmEkR6/xNqkS4onk= test"}

Результат запроса показывается в правом большом окне

{
  "data": {
    "club": {
      "title": "Клуб №1 Fight Club"
    }
  }
}

Описание интерфейса

Обработка ошибок

Есть два вида ошибок - ошибки авторизации и общие ошибки. Если запрос обработан успешно, то система вернет HTTP 200. В случае ошибки авторизации система вернет HTTP 401, а в случае общей ошибки система вернет HTTP 400.

Обработка ошибок авторизации

Если запрос обработан успешно, то система вернет HTTP 200. В случае ошибки авторизации система вернет HTTP 401, а подробная информация об ошибке будет в полях message и result

{
  "errors": [
    {
      "message": "Не указан API ключ",
      "result": 1
    }
  ]
}

Коды ошибок

result 0 - общая ошибка
result 1 - общая ошибка авторизации
result 2 - клиент не найден
result 3 - клиент уже существует
result 4 - найдено несколько клиентов
result 5 - закончился срок действия access token
result 6 - закончился срок действия refresh token

Обработка общих ошибок

Если запрос обработан успешно, то система вернет HTTP 200. В случае общей ошибки система вернет HTTP 400, а подробная информация будет в поле message

{
  "errors": [
    {
      "message": "Cannot query field \"clun\" on type \"Query\". Did you mean \"club\"?",
      "locations": [
        {
          "line": 1,
          "column": 3
        }
      ]
    }
  ]
}

Информация о клубе

Через интерфейс системы можно получить информацию о клубе:

  • Название, описание клуба, заглавный баннер клуба, логотип
  • Список залов клуба с адресами и расположением на карте
  • Расписание тренировок в залах и кто тренирует
  • Абонементы клуба
  • Анонсы мероприятий клуба
  • Статьи клуба (блог)
  • Информацию о товарах из магазина клуба

Подробнее про информация о клубе по ссылке

Авторизация в системе

В заголовке каждого запроса (Authorization header) необходимо указывать API Key или Access Token, а потом Club Slug

Если нет еще авторизованного клиента, то указывается API Key

Key Ajsgwf3SLdcGpiXLPpzc29poWermmEkR6/xNqkS4onk= test

Если уже есть авторизованный клиент, то передается Access Token

Token 1a7664fb868c683e29752f3a23f0ff939c5d739f test

Если запрос на возобновление токена, то передается Refresh Token

Refresh fe787f16a71276e5fd0562a0faeeedbe22dafbac test

Подробнее про авторизацию по ссылке

Текущая версия API

В каждом ответе есть ключ "version", который указывает на текущую версию API

{
  "data": {
    "queryName": {Info},
    "version": "2.6"
  }
}

Интернационализация и локализация

HTTP-заголовок Accept-Language сообщает серверу, какие языки клиент понимает и какая локаль предпочтительнее.

Accept-Language: <language>

<language> - Тег языка (иногда называют идентификатором локали, "locale identifier"). Состоит из 2-3 буквенного основного языкового тега, представляющего язык, и опционально за ним могут следовать дополнительные под-теги, разделённые '-'. Наиболее распространённой дополнительной информацией являются указания на страну или регион (например, 'en-US').

Сервер поддерживает три языка:

ru или ru-RU - русский
uk или uk-UA - украинский (язык по умолчанию)
en или en-US - английский

Дополнительная информация

Настройки Instasport

Доступные поля

    googleTag - string, Google Tag ID для общих страниц
    facebookPixel - string, Facebook Pixel ID для общих страниц
    landingGoogleTag - string, Facebook Pixel ID для основного лендинга
    landingFacebookPixel - Google Tag ID для основного лендинга
query InstasportSettings {
    settings {
        googleTag
        facebookPixel
        landingGoogleTag
        landingFacebookPixel
    }
}
⚠️ **GitHub.com Fallback** ⚠️