RU

Публичный API

Каталог игр читается в формате JSON без аккаунта: для другого сайта, приложения, бота…

  • Интерактивная документация (OpenAPI): /api/docs, там можно попробовать каждый вызов; исходное описание: /api/docs.jsonopenapi
  • Игры: GET /api/games
  • Одна игра: GET /api/games/{slug}
  • Категории: GET /api/categories, одна категория: GET /api/categories/{slug}

API доступен только для чтения и разрешает вызовы с любого сайта (CORS). Ответы кэшируются на одну минуту.

Игры

Параметр
category категория (её slug)
kind original (оригинальная игра), cpc (ремейк для Amstrad CPC), port (порт)
order[rating], order[plays], order[publishedAt], order[title] сортировка, asc или desc; можно указать несколько подряд, чтобы разрешить ничьи. По умолчанию: сначала самые новые
page, itemsPerPage 30 игр на страницу, до 100
curl -g -H 'Accept: application/json' 'https://<ce site>/api/games?category=arcade&order[rating]=desc'

Каждая игра:

Поле
slug, title, description
category, kind её категория (slug), тип проекта
author её автор (идентификатор GitHub)
rating, ratings средняя оценка из 5 (null, если голосов нет), число голосов
plays число запущенных партий
engine, publishedAt версия движка JumPHP, дата последней публикации
forkOf игра, форком которой она является, иначе null
url, play, source её страница, игра во весь экран, её исходный код с навигацией
image её изображение 640 × 360 (null, если его нет)
repository, manifest её репозиторий GitHub, список её опубликованных файлов (удалённый режим JumPHP)

Сортировка по оценке такая же, как на странице игр: пока у игры мало голосов, среднее подтягивается к 3 (три «призрачных» голоса), чтобы единственная оценка 5 из 5 не обгоняла множество игр с 4,5.

Страницы и JSON-LD

В обычном JSON (Accept: application/json) список — это массив. В JSON-LD (Accept: application/ld+json, формат по умолчанию) он также содержит общее число (totalItems) и адреса страниц (view.next, view.last):

{
  "@id": "/api/games",
  "totalItems": 42,
  "member": [ { "@id": "/api/games/pong", "slug": "pong", "title": "PONG", "…": "…" } ],
  "view": { "next": "/api/games?page=2", "last": "/api/games?page=2" }
}

Ошибки: 404 для игры или категории, которой не существует (или которой больше нет в списке), 422 для недопустимого параметра (kind=zzz), в формате Problem Details (application/problem+json).