公开 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 |
它所 Fork 自的游戏,否则为 null |
url、play、source |
它的页面、全屏游玩页、可浏览的源码 |
image |
640 × 360 的图片(没有则为 null) |
repository、manifest |
它的 GitHub 仓库、已发布文件的清单(JumPHP 的远程模式) |
按评分排序与游戏列表页一致:当游戏的投票很少时,平均分会被拉向 3(相当于三张幽灵票),这样单独一个 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,参数无效(kind=zzz)时返回 422,格式为 Problem Details(application/problem+json)。