Быстрый старт API
В этом руководстве выполняются два серверных запроса:
- Загрузка основной информации и темы площадки.
- Загрузка первой страницы опубликованных игр.
Подготовка функции для запросов
Сохраните данные доступа в переменных окружения сервера. Для выполнения примера требуется Node.js 18 или новее.
const apiUrl = process.env.GAME_PLATFORM_API_URL ??
'https://api.gamepush.com/gs/api/graphql';
const apiKey = process.env.GAME_PLATFORM_API_KEY;
const platformId = process.env.GAME_PLATFORM_ID;
if (!apiKey || !platformId) {
throw new Error('Missing GamePush platform credentials');
}
async function requestGamePush(query, variables = {}) {
const response = await fetch(apiUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Game-Platform-Api-Key': apiKey,
'X-Game-Platform-ID': platformId,
},
body: JSON.stringify({ query, variables }),
});
if (!response.ok) {
throw new Error(`GamePush API returned HTTP ${response.status}`);
}
const payload = await response.json();
if (payload.errors?.length) {
throw new Error(payload.errors[0].message);
}
if (payload.data.result.__typename === 'Problem') {
throw new Error(payload.data.result.message);
}
return payload.data.result;
}
Получение конфигурации площадки
PlatformFetchGamePlatform использует площадку, определённую по заголовкам запроса.
query PlatformConfig($lang: Lang) {
result: PlatformFetchGamePlatform {
__typename
... on Problem {
message
}
... on GamePlatform {
id
name(lang: $lang)
title(lang: $lang)
icon
mainPageId
supportedLanguages
styles {
colors {
primary
accent
contentBackground
}
}
}
}
}
Переменные:
{
"lang": "RU"
}
Передайте эту операцию и её переменные в requestGamePush. Функция вернёт успешную ветку GamePlatform или выбросит ошибку для Problem.
Успешный результат имеет следующую структуру:
{
"__typename": "GamePlatform",
"id": 42,
"name": "Пример игровой площадки",
"title": "Играйте в онлайн-игры",
"icon": "https://cdn.example.com/platform-icon.webp",
"mainPageId": "home",
"supportedLanguages": ["EN", "RU"],
"styles": {
"colors": {
"primary": "#7c3aed",
"accent": "#f59e0b",
"contentBackground": "#ffffff"
}
}
}
Получение опубликованных игр
Вызовите FetchGamesOnGamePlatform с параметром isPublished: true. Максимальный размер страницы — 25 игр.
query PublishedGames($input: FetchGamesOnGamePlatformInput!, $lang: Lang) {
result: FetchGamesOnGamePlatform(input: $input) {
__typename
... on Problem {
message
}
... on GameViewsList {
count
items {
id
name(lang: $lang)
description(lang: $lang)
icon(lang: $lang)
cover(lang: $lang)
platformUrl(lang: $lang)
rating
}
}
}
}
Переменные:
{
"lang": "RU",
"input": {
"gamePlatformId": 42,
"withMetrics": false,
"isPublished": true,
"limit": 12,
"offset": 0
}
}
Используйте ID выбранной площадки и в X-Game-Platform-ID, и в gamePlatformId. Серверный контекст доступа к площадке определяется API-ключом. Для загрузки следующей страницы увеличивайте offset на limit. При withMetrics: false поле GameViewsList.count содержит количество элементов в текущем ответе, а не общее число найденных игр. Остановите загрузку, когда items.length станет меньше limit.
Успешный ответ имеет следующую структуру:
{
"data": {
"result": {
"__typename": "GameViewsList",
"count": 1,
"items": [
{
"id": 101,
"name": "Пример игры",
"description": "Краткое описание игры",
"icon": "https://cdn.example.com/game.webp",
"cover": "https://cdn.example.com/game-cover.webp",
"platformUrl": "https://games.example.com/game/example-game",
"rating": 8.4
}
]
}
}
}
Следующий шаг
Отобразите каждый элемент как карточку игры и используйте platformUrl в качестве ссылки на игру. Затем перейдите к разделам «Площадка» и «Игры», где приведены полные запросы конфигурации, контента и метрик.