Вступ
Steam має вбудовний веб-API на основі HTTP, котрий можна використовувати для доступу до багатьох функцій Steamworks. API містить публічні методи, доступ до яких може отримати будь-який застосунок, що може надіслати HTTP-запит, як-от ігровий клієнт чи сервер. API також містить захищені методи, які потребують автентифікації. Доступ до них можуть отримати довірені серверні застосунки.
Наприклад, методи веб-API зазвичай використовуються захищеним сервером видавця для:
- Перевірки даних акаунта користувача Steam на цьому сервері.
- Перевірки володіння користувачем певним застосунком.
- Встановлення чи отримання даних про статистику, досягнення й показники користувача в таблиці лідерів.
- Виконання внутрішньоігрових придбань.
Повний список доступних функцій веб-API Steamworks доступний
ось тут.
Формат запиту
Публічні веб-API Steamworks доступні через запити HTTP (порт 80) чи HTTPS (порт 443) до
api.steampowered.com
.
Якщо ви видавець, то Steam також надає сервер веб-API лише для партнерів:
https://partner.steam-api.com
. Цей сервер доступніший за публічний, тож вам варто використовувати його для всіх запитів від ваших захищених серверів. Додаткова інформація розміщена
ось тут.
Як і API Steamworks на C++, веб-API розділений на багато інтерфейсів, які містять пов’язані методи. Формат URI для запиту до API такий:
https://api.steampowered.com/<interface>/<method>/v<version>/
Більшість методів підтримують певний перелік обов’язкових і необов’язкових параметрів. Залежно від методу ці параметри потрібно передавати в запиті як GET або POST.
Усі запити слід надсилати через HTTP 1.1 і за можливості використовувати захищене підключення TLS. Content-Type повинен бути
application/x-www-form-urlencoded
, а параметри POST повинні бути в тілі запиту в стандартному форматі URL-кодування. Текст потрібно надсилати як UTF-8.
Автентифікація
Багато методів веб-API мають обмеження доступу, що вимагає унікальний ключ. Докладнішу інформацію читайте
ось тут.
Масиви параметрів
Деякі методи очікують на масиви параметрів. На це вказує постфікс
[0]
у назві параметра. Під час передавання масивів завжди існуватиме параметр
count
, який визначає кількість параметрів у масиві. Наприклад:
?count=2&name[0]=SomeNameHere&name[1]=SomeOtherName
Службові інтерфейси
Окрім звичайних викликів до веб-API, існують службові інтерфейси. Ці інтерфейси дуже схожі на звичайні, але основна відмінність полягає в тому, що всі службові API приймають свої аргументи і як параметри GET і POST, і як єдиний об’єкт JSON. Щоби передати дані у форматі JSON, викличте метод веб-API з параметром
input_json
:
?key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&input_json={"steamid":76561197972495328}
Майте на увазі, що JSON має бути закодований як URL. Поля key і format передаються як окремі параметри. Запити POST також підтримуються.
Ви можете визначити, чи є метод службовий, за назвою інтерфейсу. Якщо назва завершується на «Service», як-от
IPlayerService, значить метод підтримує додатковий спосіб передачі параметрів. Параметри деяких службових методів мають складніші структури, для них є обов’язковим цей альтернативний спосіб введення.
Приклад запиту
Наступний приклад отримує три найостанніші новини про Team Fortress 2.
Запит уточнює, що відповідь має бути у форматі JSON і містить: необхідний параметр AppID (AppID гри Team Fortress 2 — 440) й необов’язковий параметр — обмеження на кількість результатів, що повертаються.
GET /ISteamNews/GetNewsForApp/v2/?appid=440&count=3\r\n
Host: api.steampowered.com/r/n
Content-Length: 0\r\n\r\n
Ви можете виконати цей запит і отримати його результати тут:
https://api.steampowered.com/ISteamNews/GetNewsForApp/v2/?appid=440&count=3Додаткова інформація про цей виклик доступна тут:
ISteamNews/GetNewsForAppОтримання SteamID користувача
Веб-API Steamworks ідентифікує окремих користувачів за допомогою їхніх унікальних 64-бітних SteamID. Безпечне отримання користувацького SteamID описано
ось тут.
Міркування стосовно адрес вузлів веб-API та брандмауерів
Публічний веб-API (
api.steampowered.com
) розташований за межовим сервером кешування Akamai, тож видима для вас IP-адреса відрізнятиметься залежно від вашого місцеперебування й постійних змін на сервері. IP-адреси можуть часто змінюватися, тож якщо ви виконуєте запити через брандмауер, продовжуйте читати.
Для всіх запитів зі своїх захищених серверів вам слід використовувати вузол лише для партнерів (
https://partner.steam-api.com
). Цей вузол має деякі властивості, що відрізняються від загальнодоступного вузла:
- Доступ можливий лише через HTTPS.
- Вузол знаходиться не за межовим сервером кешування Akamai.
- Кожен запит до цього вузла повинен здійснюватися за допомогою ключа веб-API, навіть якщо для запиту зазвичай не потрібен ключ. Запити без дійсного ключа повернуться помилку з кодом 403.
- Якщо запити генерують коди стану 403, що зазвичай трапляється під час використання звичайного ключа веб-API замість ключа видавця, то для IP-підключення буде встановлено жорстке обмеження на частоту запитів. Це необхідно для забезпечення високої доступності.
- Якщо ви надсилаєте запити до цього сервісу API з вузла, який має фільтр-брандмауер на вихідні запити, то додайте DNS-адресу partner.steam-api.com у ваш список дозволів. Якщо ваш брандмауер підтримує цифрові адреси, то додайте в список дозволів наступний CIDR:
208.64.200.0/22
.
ПРИМІТКА: не варто підключатися до серверів веб-API за допомогою IP, використовуйте DNS-ім’я. Ці адреси надаються лише тим клієнтам, яким потрібно додати їх у список виключень брандмауерів.
Список дозволів для IP-адрес
Ми дозволяємо додавати в список дозволів IP-адреси для викликів веб-API. Це додатковий шар захисту на випадок, якщо ваш ключ веб-API буде викрадено, оскільки він перевіряє, щоби успішними ставали лише виклики веб-API з IP-адрес у білому списку. Коли в список дозволів додається якась IP-адреса, то всі запити з інших адрес блокуватимуться й повертатимуть помилку 403 (доступ заборонено).
Додавання IP-адрес до білого списку є простим. На будь-якій сторінці групи, що має ключ веб-API, клацніть на кнопку «Управління ключем веб-API» й дотримуйтеся інструкцій.
Кожен ключ веб-API має власний список дозволів і додавати в цей список щось
необов’язково.
Примітка: додавання у список дозволів не гарантує захист ключа веб-API. Захищайте свій ключ самостійно: не поширюйте його та змінюйте одразу, якщо він потрапив до сторонніх осіб.