Публичный 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).