Home - instasport/club-api GitHub Wiki
Система 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 можно воспользоваться отладчиком запросов:
Сам запрос пишется слева в большом окне
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
Подробнее про авторизацию по ссылке
В каждом ответе есть ключ "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 - английский
Доступные поля
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
}
}