A API pública
O diretório de jogos pode ser lido em JSON, sem conta: para outro site, um aplicativo, um bot…
- Documentação interativa (OpenAPI): /api/docs, dá para testar cada chamada ali; a descrição bruta: /api/docs.jsonopenapi
- Os jogos:
GET /api/games - Um jogo:
GET /api/games/{slug} - As categorias:
GET /api/categories, uma categoria:GET /api/categories/{slug}
A API é somente leitura e permite chamadas a partir de qualquer site (CORS). As respostas ficam em cache por um minuto.
Os jogos
| Parâmetro | |
|---|---|
category |
uma categoria (o slug dela) |
kind |
original (criação), cpc (remake de Amstrad CPC), port (port) |
order[rating], order[plays], order[publishedAt], order[title] |
a ordenação, asc ou desc; vários em sequência para desempatar. Por padrão: os mais recentes primeiro |
page, itemsPerPage |
30 jogos por página, até 100 |
curl -g -H 'Accept: application/json' 'https://<ce site>/api/games?category=arcade&order[rating]=desc'
Cada jogo:
| Campo | |
|---|---|
slug, title, description |
|
category, kind |
a categoria (slug), o tipo de projeto |
author |
o autor (identificador do GitHub) |
rating, ratings |
a nota média de 5 (null sem votos), o número de votos |
plays |
o número de partidas iniciadas |
engine, publishedAt |
a versão do motor JumPHP, a data da última publicação |
forkOf |
o jogo do qual ele é fork, senão null |
url, play, source |
a página dele, o jogo em tela cheia, o código navegável |
image |
a imagem de 640 × 360 (null se não tiver) |
repository, manifest |
o repositório GitHub, a lista dos arquivos publicados (modo remoto do JumPHP) |
A ordenação por nota é a mesma da página dos jogos: a média é puxada para 3 enquanto um jogo tem poucos votos (três votos fantasmas), para que um único 5 de 5 não passe à frente de muitos 4,5.
Páginas e JSON-LD
Em JSON simples (Accept: application/json), uma lista é um array. Em JSON-LD
(Accept: application/ld+json, o formato padrão), ela também informa o número total (totalItems) e os
endereços das páginas (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" }
}
Erros: 404 para um jogo ou uma categoria que não existe (ou não está mais listado), 422 para um parâmetro
inválido (kind=zzz), no formato Problem Details (application/problem+json).