You've already forked CC-Framework.BriskGameServer
10 KiB
10 KiB
Brisk API接口与示例文档
1. 核心约定
- 项目唯一标识:
game_key - 项目级
channel / platform已移除 - 初始化与动态配置:
- 必填
game_key - 可选
client_version
- 必填
- 登录身份:
login_providerlogin_user_id
- 登录成功后服务端返回内部身份:
player_idproject_account_idaccess_token
- 需要跨系统跳转玩家时,空间模块与后台排行榜查询支持直接传:
login_provider + login_user_id
2. 客户端主流程
- 可选:
GET /api/client/time GET /api/client/bootstrapPOST /api/auth/login/exchange- 带
Bearer access_token调用:GET /api/player/meGET /api/announcements- 排行榜、存档、空间等业务接口
GET /api/config/current为公开接口,登录前后都可调用
3. 初始化
3.1 获取平台时间
GET /api/client/time
说明:
- 平台级匿名授时接口
- 不需要
game_key - 不依赖任何项目配置
- 返回 UTC 时间,适合客户端启动时做统一对时
示例:
curl "https://brisk.lightyears.ltd/api/client/time"
返回重点:
server_timeserver_unixserver_unix_ms
3.2 获取初始化信息
GET /api/client/bootstrap
查询参数:
game_key:必填client_version:可选,建议传入;不传时只会命中不设版本范围的配置device_id:可选
示例:
curl "https://brisk.lightyears.ltd/api/client/bootstrap?game_key=demo-game&client_version=1.0.0&device_id=device-001"
返回重点:
project_nameserver_timemaintenance_modemaintenance_messagefeature_flagsdynamic_configmin_client_version
4. 登录
4.1 登录换票
POST /api/auth/login/exchange
请求体:
game_key:必填login_provider:必填,例如taplogin_user_id:与code二选一code:与login_user_id二选一device_id:可选client_version:可选nickname:可选avatar_url:可选profile_json:可选对象
示例:
curl -X POST "https://brisk.lightyears.ltd/api/auth/login/exchange" \
-H "Content-Type: application/json" \
-d '{
"game_key": "demo-game",
"login_provider": "tap",
"login_user_id": "tap_user_10001",
"device_id": "android-001",
"client_version": "1.0.0",
"nickname": "Tap Player",
"avatar_url": "https://example.com/avatar.png",
"profile_json": {
"region": "cn",
"source": "tap"
}
}'
返回重点:
access_tokenexpires_inplayer_idproject_account_idis_new_playerprofile.login_providerprofile.login_user_id
5. 玩家与动态配置
5.1 获取当前玩家
GET /api/player/me
返回重点:
player_idproject_account_idlogin_providerlogin_user_idnicknameavatar_urlprofile_json
5.2 获取动态配置
GET /api/config/current
查询参数:
game_key:必填client_version:可选,建议传入;不传时只会命中不设版本范围的配置
说明:
feature_flags现在是标准 key-value 对象dynamic_config保持为自定义 JSON 对象- 命中规则只看
client_version - 该接口当前无需
Bearer access_token
示例:
curl "https://brisk.lightyears.ltd/api/config/current?game_key=demo-game&client_version=1.0.0"
6. 公告
6.1 获取公告列表
GET /api/announcements
6.2 标记已读
POST /api/announcements/{id}/read
7. 排行榜
7.1 客户端接口
GET /api/ranks/{rank_key}/topGET /api/ranks/{rank_key}/meGET /api/ranks/{rank_key}/around-mePOST /api/ranks/{rank_key}/scoreGET /api/ranks/{rank_key}/season/currentGET /api/ranks/{rank_key}/historyGET /api/ranks/{rank_key}/history/{season_id}
提交分数示例:
curl -X POST "https://brisk.lightyears.ltd/api/ranks/season-score/score" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"score": 128}'
排行榜返回项重点:
rankplayer_idproject_account_idlogin_providerlogin_user_idscorenicknameavatar_url
7.2 后台排行榜接口
GET /api/admin/ranksPOST /api/admin/ranksPUT /api/admin/ranks/{rank_key}DELETE /api/admin/ranks/{rank_key}DELETE /api/admin/ranks/{rank_key}/players/{player_id}GET /api/admin/ranks/{rank_key}/leaderboardPOST /api/admin/ranks/{rank_key}/resetGET /api/admin/ranks/{rank_key}/seasonsGET /api/admin/ranks/{rank_key}/seasons/{season_id}/logs
后台当前榜单查询支持参数:
project_idpagepage_sizeplayer_idproject_account_idlogin_providerlogin_user_id
8. 云存档
说明:
- 云存档是二进制上传/下载接口
- 适合直接存 Unity 存档 bytes、protobuf、msgpack、压缩包等
- 不限制为 JSON
接口:
GET /api/archives/slotsGET /api/archives/slot/{slot_no}/metaPOST /api/archives/slot/{slot_no}/uploadGET /api/archives/slot/{slot_no}/download
上传示例:
curl -X POST "https://brisk.lightyears.ltd/api/archives/slot/1/upload" \
-H "Authorization: Bearer <token>" \
-F "base_version=0" \
-F "checksum=<sha256>" \
-F "file=@save.dat"
9. 玩家空间
说明:
- 空间主信息接口只返回元数据,不再内嵌内容本体
- 空间内容本体通过独立
/content接口上传和下载 - 空间内容支持任意 bytes
- 可以上传二进制、文本、JSON、protobuf、msgpack、压缩包等格式
- 如果是多槽位私有主存档,仍优先走云存档模块;如果是空间自定义内容,可直接走空间内容接口
接口:
PUT /api/spaces/me/contentGET /api/spaces/{player_id}GET /api/spaces/{player_id}/contentGET /api/spaces/{player_id}/statsGET /api/spaces/{player_id}/likesPOST /api/spaces/{player_id}/likeDELETE /api/spaces/{player_id}/likeGET /api/spaces/me/visitsGET /api/spaces/by-loginGET /api/spaces/by-login/contentGET /api/spaces/by-login/statsGET /api/spaces/by-login/likesPOST /api/spaces/by-login/likeDELETE /api/spaces/by-login/like
主信息接口返回重点:
content_existscontent_versioncontent_typecontent_size_bytescontent_checksumlike_counttoday_like_countliked_by_melike_reset_atvisit_countupdated_at
点赞接口说明:
- 点赞按
Asia/Shanghai自然日分周期 - 同一玩家对同一空间同一天重复点赞时:
- 接口仍返回成功
created=falselike_count与today_like_count不会继续增加
DELETE /like只会撤销当前周期内的那一次点赞- 支持给自己的空间点赞
点赞列表说明:
GET /api/spaces/{player_id}/likesGET /api/spaces/by-login/likes- 支持可选查询参数
scopehistory:历史点赞记录,默认值cycle:当前周期内的点赞记录
limit最大返回100
最近访问列表说明:
GET /api/spaces/me/visits- 支持可选查询参数
limit - 默认返回
50条 - 单次最大返回
100条
上传表单字段:
base_version:用于乐观锁;首次上传可传0content_type:可选,建议传,例如application/octet-stream、text/plain、application/jsonchecksum:可选;如果传入,服务端会校验 SHA-256file:必传,内容本体
上传空间内容示例:
curl -X PUT "https://brisk.lightyears.ltd/api/spaces/me/content" \
-H "Authorization: Bearer <token>" \
-F "base_version=0" \
-F "content_type=application/octet-stream" \
-F "checksum=<sha256>" \
-F "file=@space-content.bin"
下载空间内容示例:
curl "https://brisk.lightyears.ltd/api/spaces/by-login/content?login_provider=tap&login_user_id=tap_user_10001" \
-H "Authorization: Bearer <token>" \
--output space-content.bin
按第三方身份查看空间示例:
curl "https://brisk.lightyears.ltd/api/spaces/by-login?login_provider=tap&login_user_id=tap_user_10001" \
-H "Authorization: Bearer <token>"
按第三方身份点赞示例:
curl -X POST "https://brisk.lightyears.ltd/api/spaces/by-login/like?login_provider=tap&login_user_id=tap_user_10001" \
-H "Authorization: Bearer <token>"
按第三方身份查询当前周期点赞列表示例:
curl "https://brisk.lightyears.ltd/api/spaces/by-login/likes?login_provider=tap&login_user_id=tap_user_10001&scope=cycle&limit=20" \
-H "Authorization: Bearer <token>"
点赞返回示例:
{
"liked": true,
"created": true,
"liked_by_me": true,
"like_count": 128,
"today_like_count": 17,
"like_reset_at": "2026-04-22T00:00:00+08:00"
}
10. 后台项目与配置
10.1 项目
GET /api/admin/projectsGET /api/admin/projects/{id}POST /api/admin/projectsPUT /api/admin/projects/{id}DELETE /api/admin/projects/{id}POST /api/admin/projects/{id}/iconGET /api/admin/projects/{id}/icon
说明:
- 创建项目时只传项目信息,不再传
channel / platform game_key由服务端自动生成
10.2 当前动态配置
GET /api/admin/configs/current?project_id=...PUT /api/admin/configs/current
10.3 公告
GET /api/admin/announcementsGET /api/admin/announcements/{id}POST /api/admin/announcementsPUT /api/admin/announcements/{id}DELETE /api/admin/announcements/{id}
10.4 玩家
GET /api/admin/playersGET /api/admin/players/{player_id}POST /api/admin/players/{player_id}/banPOST /api/admin/players/{player_id}/unban
玩家列表支持筛选:
project_idplayer_idproject_account_idlogin_providerlogin_user_id
10.5 空间管理
GET /api/admin/spaces/overview?project_id=...GET /api/admin/spaces?project_id=...GET /api/admin/spaces/{player_id}?project_id=...GET /api/admin/spaces/{player_id}/content?project_id=...GET /api/admin/spaces/{player_id}/likes?project_id=...GET /api/admin/spaces/{player_id}/visits?project_id=...
说明:
- 后台空间详情返回内容元数据
- 如果需要查看空间内容本体,使用独立
/content下载接口 - 下载响应会返回:
Content-TypeX-Space-VersionX-Space-Checksum
11. OpenAPI
完整 OpenAPI 导出: