Формат запроса
Все GraphQL-запросы выполняются методом POST на /graphql и передают ID разрешённого документа из справочника API.
Ключевые термины этого раздела: documentId, variables, Context token и X-Project-Context.
Тело запроса
{
"documentId": "me",
"variables": {}
}
| Поле | Тип | Описание |
|---|---|---|
documentId | String | ID query/mutation из справочника API |
variables | Object | Переменные операции. Если переменных нет, передайте {} |
Примеры в справочнике показывают полный набор переменных операции, включая необязательные поля. Необязательные поля можно не отправлять, если сценарий их не использует.
Для выполнения сценария передавайте ID документа и его переменные в формате ниже.
Обязательные заголовки
| Заголовок | Описание |
|---|---|
Accept-Language | Предпочтительные языки ответа в стандартном HTTP-формате, например ru-RU, ru;q=0.9, en;q=0.8 |
Content-Type | Всегда application/json |
X-Project-Context | Значение identity.contextToken из конфигурации проекта |
X-Request-Id | ID запроса для трассировки и обращения в поддержку |
Контекстные заголовки
| Заголовок | Описание |
|---|---|
Authorization | Bearer <sessionId> для авторизованного пользователя |
Используйте identity.contextToken из загруженной конфигурации проекта без изменений. Для авторизованных операций дополнительно передаётся Authorization: Bearer <sessionId>.
Авторизованные операции используют выбранный сервер; для переключения вызовите changeServer. Публичные каталоги и операции с явной целью принимают gameServerId в variables.
Примеры запроса
Для страниц операций можно показывать запрос и ответ рядом, чтобы сразу было видно полный обмен с API.
POST /graphql HTTP/1.1
Accept-Language: ru
Content-Type: application/json
X-Project-Context: <project-context-token>
X-Request-Id: optional-request-id
{
"documentId": "me",
"variables": {}
}
{
"data": {
"me": {
"id": 1,
}
}
}
- curl
- fetch
- PHP
- JS
- C#
- Rust
- Go
- Python
curl -X POST https://project.example/graphql \
-H "Accept-Language: ru" \
-H "Content-Type: application/json" \
-H "X-Project-Context: <project-context-token>" \
-H "X-Request-Id: optional-request-id" \
-d '{"documentId":"me","variables":{}}'
await fetch('/graphql', {
method: 'POST',
headers: {
'Accept-Language': 'ru',
'Content-Type': 'application/json',
'X-Project-Context': projectConfig.identity.contextToken,
'X-Request-Id': requestId,
},
body: JSON.stringify({
documentId: 'servers',
variables: {},
}),
});
$response = file_get_contents('https://project.example/graphql', false, stream_context_create([
'http' => [
'method' => 'POST',
'header' => [
'Accept-Language: ru',
'Content-Type: application/json',
'X-Project-Context: ' . $projectContextToken,
'X-Request-Id: ' . $requestId,
],
'content' => json_encode([
'documentId' => 'me',
'variables' => new stdClass(),
]),
],
]));
async function api(documentId, variables = {}) {
return fetch('/graphql', {
method: 'POST',
headers: {
'Accept-Language': 'ru',
'Content-Type': 'application/json',
'X-Project-Context': projectConfig.identity.contextToken,
'X-Request-Id': requestId,
},
body: JSON.stringify({documentId, variables}),
}).then((response) => response.json());
}
using System.Net.Http.Headers;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://project.example/graphql");
request.Headers.AcceptLanguage.ParseAdd("ru");
request.Headers.Add("X-Project-Context", projectContextToken);
request.Headers.Add("X-Request-Id", requestId);
request.Content = new StringContent(
"""{"documentId":"me","variables":{}}""",
Encoding.UTF8,
"application/json"
);
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
let client = reqwest::Client::new();
let response = client
.post("https://project.example/graphql")
.header("Accept-Language", "ru")
.header("Content-Type", "application/json")
.header("X-Project-Context", project_context_token)
.header("X-Request-Id", request_id)
.json(&serde_json::json!({
"documentId": "me",
"variables": {}
}))
.send()
.await?;
let data: serde_json::Value = response.json().await?;
package main
import (
"bytes"
"encoding/json"
"net/http"
)
func main() {
payload, _ := json.Marshal(map[string]any{
"documentId": "me",
"variables": map[string]any{},
})
request, _ := http.NewRequest("POST", "https://project.example/graphql", bytes.NewReader(payload))
request.Header.Set("Accept-Language", "ru")
request.Header.Set("Content-Type", "application/json")
request.Header.Set("X-Project-Context", projectContextToken)
request.Header.Set("X-Request-Id", requestId)
response, err := http.DefaultClient.Do(request)
if err != nil {
panic(err)
}
defer response.Body.Close()
}
import requests
response = requests.post(
"https://project.example/graphql",
headers={
"Accept-Language": "ru",
"Content-Type": "application/json",
"X-Project-Context": project_context_token,
"X-Request-Id": request_id,
},
json={
"documentId": "me",
"variables": {},
},
)
data = response.json()
API учитывает приоритеты Accept-Language и региональные теги. Если подходящий язык не опубликован проектом, используется язык профиля, язык проекта или en.