《游戏服务端架构·核心系统与契约》附录 A 平台接口速查

把 northstar-platform 对三款产品开放的核心接口收成一张速查表:账号、登录、匹配、房间、结算、经济、社交、榜单、邮件、支付、合规与数据,逐项列出调用方式、幂等键、一致性窗口、典型错误与降级语义,并给出统一错误分类和职责边界。

这份速查表怎么用

卷二各章分别给出了系统契约。到了接入阶段,团队真正需要的是另一张表:平台对游戏开放了哪些接口、调用时要注意什么、出错时怎么处理。

这份附录按能力列出接口清单。它不是完整的 API 文档,不包含字段级定义和示例报文;它只回答集成时最容易出错的那几件事:

  • 这个接口是不是幂等的,幂等键由谁生成;
  • 数据是强一致还是最终一致,窗口大概多大;
  • 超时、重复、越权分别返回什么;
  • 平台不可用时,游戏侧应该降级还是报错。

接口名使用能力语义命名,不绑定具体协议。RPC、HTTP 或消息都可以实现同一份契约。

一、统一约定

1.1 租户上下文

所有平台接口都必须携带租户上下文:

game_id      游戏标识,平台据此做配额、数据隔离与审计
env          prod / staging / dev,禁止跨环境访问
channel      可选,渠道标识,用于账号与支付归因
request_id   调用方生成的唯一请求 ID,用于链路追踪

缺少 game_id 的请求一律拒绝。不要把租户信息放在 URL 路径里让调用方自由拼接,平台应该在网关层强制注入并校验。

1.2 幂等约定

写接口统一接受 idempotency_key。规则:

  1. 键由调用方生成,平台不替调用方编造;
  2. 同一租户、同一能力、同一键,只执行一次;
  3. 重复请求返回第一次的结果,不返回“已存在”错误;
  4. 幂等记录保留时间不短于业务重试窗口,通常 24 小时起步。

查询接口不需要幂等键,但必须接受 request_id 以便排查。

1.3 错误分类

平台错误统一归为五类,游戏侧按类别决定是否重试:

类别典型错误码是否可重试调用方动作
参数错误INVALID_ARGUMENT否修正参数
未授权UNAUTHENTICATED / PERMISSION_DENIED否检查凭证与权限
冲突ALREADY_EXISTS / VERSION_CONFLICT视情况读取当前状态后决定
暂时不可用UNAVAILABLE / DEADLINE_EXCEEDED是退避重试,使用同一幂等键
结果未知UNKNOWN_RESULT查询后决定用幂等键或查询接口确认

UNKNOWN_RESULT 必须单独存在。把超时当成失败,会导致调用方重复执行;把超时当成成功,会导致数据缺失。

二、账号与身份

接口用途幂等键一致性典型错误
Account.Create创建内部账号调用方生成强一致重复创建、渠道标识缺失
Account.Get查询账号主体不需要强一致不存在、已注销
Identity.Bind绑定外部身份provider + external_id + game_id强一致已绑定其他账号、渠道回调重复
Identity.Unbind解绑外部身份同上强一致最后一个登录方式不可解绑
Account.Merge合并影子账号合并批次号强一致目标账号状态不允许
Account.Delete发起注销注销申请号最终一致有未结算订单、冷却期内

关键约束:

  • 一个外部身份在同一游戏内只能指向一个内部账号;
  • 解绑前必须确认还有其他可用登录方式;
  • 注销是异步流程,平台返回受理结果,不返回“已删完”。

三、登录与会话

接口用途幂等键一致性典型错误
Login.IssueTicket签发一次性登录票据request_id强一致凭证错误、账号封禁
Login.Exchange票据换会话令牌票据 ID强一致票据过期、已使用
Session.Renew续期会话会话 ID + 版本强一致会话已吊销、版本过期
Session.Revoke吊销会话会话 ID强一致会话不存在(幂等成功)
Login.Queue进入登录排队排队票据最终一致队列已满、票据过期

票据与会话令牌的职责不同:票据一次性、短命,用于证明“刚刚完成了身份验证”;会话令牌可续期,用于后续请求。不要用会话令牌替代登录票据,也不要把票据当成长连接凭证。

四、匹配与房间

接口用途幂等键一致性典型错误
Match.Enqueue进入匹配队列玩家 + 模式 + 批次最终一致重复入队、模式不存在
Match.Cancel取消匹配入队票据最终一致已匹配成功(返回当前状态)
Match.Result查询匹配结果不需要最终一致结果尚未生成
Room.Create创建房间对局唯一键强一致重复创建、资源不足
Room.Get查询房间状态不需要强一致房间不存在、已回收
Room.Close关闭房间房间 ID + 版本强一致版本冲突、已有结算在途

匹配与房间是两段式契约:匹配只负责“找到人”,房间负责“落在哪”。匹配成功后房间创建失败,必须有补偿或重新入队策略,不能把玩家留在中间态。

五、结算与发奖

接口用途幂等键一致性典型错误
Settle.Submit提交结算单battle_id + season_id强一致重复提交(返回原单)、结果非法
Settle.Get查询结算单不需要强一致不存在、仍在处理
Settle.Reverse改判冲正冲正单号强一致已过冲正窗口、重复冲正
Reward.Grant发放奖励结算单号 + 奖励项强一致重复发奖(幂等成功)、资产上限

顺序必须是“先落结算单,再发奖”。发奖失败时结算单保持待发状态,由补偿任务重试;不要在发奖成功后再补结算单。

六、经济与交易

接口用途幂等键一致性典型错误
Wallet.Get查询余额不需要强一致账号不存在
Wallet.Debit扣减业务单号强一致余额不足、重复扣减
Wallet.Credit增加业务单号强一致超过上限、来源非法
Trade.Lock交易托管锁定交易单号强一致资产不足、已在交易中
Trade.Commit完成交易交易单号强一致锁定过期、双方状态变化
Trade.Rollback回滚交易交易单号强一致已完成(幂等成功)

余额查询与扣减必须走同一账本。游戏服可以缓存展示余额,但任何扣减都必须由经济服务裁决。

七、社交、公会与聊天

接口用途幂等键一致性典型错误
Relation.Add添加好友/关注双方 ID + 关系类型最终一致黑名单、重复添加
Relation.Remove删除关系双方 ID + 关系类型最终一致不存在(幂等成功)
Guild.Join加入公会申请单号强一致人数已满、重复申请
Guild.Grant修改权限权限版本号强一致版本冲突、越权
Chat.Send发送消息客户端消息 ID最终一致限速、被禁言、频道不存在

关系链允许最终一致,但必须保证“黑名单优先生效”;公会权限变更要立即失效,不能等缓存过期。

八、榜单、邮件与奖励

接口用途幂等键一致性典型错误
Rank.Submit提交分数玩家 + 赛季 + 场次最终一致旧赛季、分数回退
Rank.Get查询榜单/名次不需要最终一致榜单未生成
Mail.Send发送邮件业务事件 ID + 收件人强一致重复投递(幂等成功)
Mail.Claim领取附件邮件 ID + 附件项强一致已领取、背包满
Mail.Expire过期处理邮件 ID最终一致已领取(跳过)

榜单允许延迟可见,但必须说明延迟窗口;邮件与附件不允许丢失,也不允许重复领取。

九、支付与合规

接口用途幂等键一致性典型错误
Pay.CreateOrder创建订单内部订单号强一致渠道不可用、金额非法
Pay.Callback渠道回调渠道单号强一致验签失败、金额不符
Pay.Deliver发货订单号 + 商品项强一致重复发货(幂等成功)
Pay.Refund退款退款单号强一致已退款、超出可退金额
Pay.Reconcile对账差异对账批次最终一致渠道账单缺失
Compliance.Check登录/消费判定请求 ID强一致实名信息缺失、规则未配置

支付状态与发货状态分开;合规判定与游戏执行分开。平台给出“允许/限制/拒绝”,游戏侧负责执行与提示。

十、数据与审计

接口/事件用途幂等一致性备注
Event.Publish发布领域事件事件 ID最终一致至少一次投递,消费方去重
Audit.Write写审计日志事件 ID最终一致不允许修改与删除
Data.Export导出玩家数据导出批次最终一致需审批与脱敏
Data.Delete删除个人数据删除申请号最终一致覆盖缓存、日志、备份

事件总线通常保证至少一次,不保证顺序。消费方必须用事件 ID 去重,并在需要顺序时按业务键分区。

十一、平台与游戏的职责边界

能力平台负责游戏负责
账号身份、绑定、注销、风控信号角色创建、角色数据
登录票据、会话、吊销连接管理、重连、顶号
匹配通用队列与分段能力模式规则、队伍规则、机器人策略
房间实例调度、租约、回收房间内玩法与状态
结算结算单、发奖、冲正战斗结果判定
经济账本、扣增、对账产出消耗规则、活动配置
榜单存储、结算、读取计分规则、赛季定义
邮件投递、附件、过期触发时机、文案
支付订单、回调、退款、对账商品配置、发货内容
合规规则判定执行、提示、客服流程

边界的原则是:平台提供机制,游戏决定策略。 平台不应内置某款游戏的玩法规则,游戏也不应绕过平台直接改账号、余额或订单。

十二、常见误用

误用后果正确做法
用会话令牌代替登录票据票据一次性语义丢失,重放风险票据只换一次,换完即废
匹配成功后再校验资格玩家进入房间才被踢入队前校验,结果返回前复核
发奖成功后才写结算单崩溃后无法判断是否已发先落单,再发奖
游戏服直连经济库绕过账本与审计只走经济接口
支付回调不验签伪造回调可白拿商品强制验签 + 来源白名单
事件消费不去重重复发奖、重复扣款事件 ID 幂等表
榜单读不到就报错榜单故障拖垮主流程降级为“暂不可用”,不阻塞登录
删除只删主表合规风险删除任务覆盖缓存、日志、备份

十三、一页纸速查

调用任何写接口前:
  1. 带 game_id / env / request_id
  2. 生成幂等键,并确保重试复用同一个键
  3. 明确超时后的动作:查询,而不是盲目重试

判断错误:
  INVALID_ARGUMENT / UNAUTHENTICATED / PERMISSION_DENIED → 不重试
  ALREADY_EXISTS / VERSION_CONFLICT → 先读状态
  UNAVAILABLE / DEADLINE_EXCEEDED → 退避重试
  UNKNOWN_RESULT → 用幂等键或查询接口确认

设计降级:
  账号/登录不可用 → 已登录会话可短时续命,禁止新登录
  匹配/榜单不可用 → 功能降级,不阻塞主流程
  经济/支付不可用 → 停止相关写操作,保留待处理单

速查表到这里结束。它不能替代接口文档,但可以在评审时快速检查:每个跨系统调用,是否都回答了幂等、一致性、失败语义和降级这四个问题。

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「books」更多文章

  1. 《互联网产品的 AI 架构·平台化与治理》附录 C 平台化评审清单
  2. 《互联网产品的 AI 架构·平台化与治理》附录 B 能力目录与配额字段速查
  3. 《互联网产品的 AI 架构·平台化与治理》附录 A 治理角色与职责速查