CroupierCroupier
指南
架构
API 参考
  • C++ SDK
  • Go SDK
  • Java SDK
  • JavaScript SDK
  • Python SDK
分析
GitHub
指南
架构
API 参考
  • C++ SDK
  • Go SDK
  • Java SDK
  • JavaScript SDK
  • Python SDK
分析
GitHub
  • 概览

    • 首页
    • 目录结构
    • 部署指南
    • 配置管理
    • 安全配置
  • 架构设计

    • 架构设计
    • 虚拟对象设计
    • Croupier 虚拟对象(Virtual Object) - 快速参考指南
  • 函数管理

    • 函数管理系统分析
    • Croupier 函数管理系统 - 快速参考指南
    • /FUNCTION_MANAGEMENT_COMPARISON.html
  • SDK 文档

    • SDK Development
    • C++ SDK 文档索引
    • Croupier C++ SDK 快速参考
  • 生成器与协议

    • protoc-gen-croupier (skeleton)
    • Protobuf 自定义 Options 使用指南
    • Croupier API 文档
  • 分析系统

    • 游戏数据分析系统
    • 快速开始

Croupier API 文档

本文档描述 Croupier 系统暴露的 gRPC 和 HTTP REST API。

注意: 权威 API 定义在 proto/ 目录中。本文档提供概览和使用指南。

目录

  • 核心服务
    • ControlService - Agent 注册与管理
    • FunctionService - 函数调用
    • EdgeService - Edge 代理
    • LocalControlService - 本地控制
  • HTTP REST API
  • 数据模型
  • 错误码

核心服务

ControlService

包: croupier.server.v1

功能: Agent 注册、心跳、能力声明和函数目录查询

方法

方法请求响应描述
RegisterRegisterRequestRegisterResponseAgent 注册到 Server
HeartbeatHeartbeatRequestHeartbeatResponseAgent 心跳保活
RegisterCapabilitiesRegisterCapabilitiesRequestRegisterCapabilitiesResponse注册 Provider 能力清单
ListFunctionsSummarygoogle.protobuf.EmptyListFunctionsSummaryResponse获取函数目录摘要

消息定义

// Agent 注册请求
message RegisterRequest {
  string agent_id = 1;              // Agent 唯一 ID
  string version = 2;               // Agent 版本
  repeated FunctionDescriptor functions = 3;  // 函数列表
  string rpc_addr = 4;              // Agent 可达 gRPC 地址
  string game_id = 5;               // 游戏 ID (多租户必需)
  string env = 6;                   // 环境 (prod/stage/test)
  repeated AgentProcess processes = 7;  // 注册的进程
}

// Agent 注册响应
message RegisterResponse {
  string session_id = 1;            // 会话 ID
  int64 expire_at = 2;              // 过期时间 (Unix 秒)
}

// 心跳请求
message HeartbeatRequest {
  string agent_id = 1;
  string session_id = 2;
}

// Provider 能力注册
message RegisterCapabilitiesRequest {
  ProviderMeta provider = 1;        // Provider 元信息
  bytes manifest_json_gz = 2;       // Gzip 压缩的 manifest.json
}

// 函数描述符(包含 UI/RBAC 元数据)
message FunctionDescriptor {
  string id = 1;                   // 函数 ID,如 "player.ban"
  string version = 2;              // SemVer,如 "1.2.0"
  string category = 3;             // 分组类别
  string risk = 4;                 // 风险级别: low/medium/high
  string entity = 5;               // 实体类型,如 "player"
  string operation = 6;            // 操作类型: create/read/update/delete
  bool enabled = 7;                // 是否启用

  // UI/i18n/权限元数据
  croupier.common.v1.I18nText display_name = 20;
  croupier.common.v1.I18nText summary = 21;
  repeated string tags = 22;
  croupier.common.v1.Menu menu = 23;
  croupier.common.v1.PermissionSpec permissions = 24;
}

使用示例 (Go)

import serverv1 "github.com/cuihairu/croupier/pkg/pb/croupier/server/v1"

// Agent 注册
resp, err := controlClient.Register(ctx, &serverv1.RegisterRequest{
    AgentId: "agent-001",
    Version: "1.0.0",
    GameId:  "mygame",
    Env:     "prod",
    Functions: []*serverv1.FunctionDescriptor{
        {
            Id:      "player.ban",
            Version: "1.0.0",
            Enabled: true,
        },
    },
})

FunctionService

包: croupier.function.v1

功能: 函数调用、异步作业、流式事件

方法

方法请求响应描述
InvokeInvokeRequestInvokeResponse同步函数调用
StartJobInvokeRequestStartJobResponse启动异步作业
StreamJobJobStreamRequeststream JobEvent订阅作业事件流
CancelJobCancelJobRequestStartJobResponse取消作业

消息定义

// 函数调用请求
message InvokeRequest {
  string function_id = 1;           // 函数 ID
  string idempotency_key = 2;       // 幂等键(可选)
  bytes payload = 3;                // 请求载荷 (JSON/Proto)
  map<string, string> metadata = 4; // 元数据
}

// 函数调用响应
message InvokeResponse {
  bytes payload = 1;                // 响应载荷
}

// 作业事件
message JobEvent {
  string type = 1;                  // 事件类型: progress/log/done/error
  string message = 2;               // 消息内容
  int32 progress = 3;              // 进度 0-100 (type=progress 时)
  bytes payload = 4;               // 最终结果 (type=done 时)
}

使用示例 (Go)

// 同步调用
resp, err := functionClient.Invoke(ctx, &functionv1.InvokeRequest{
    FunctionId:     "player.ban",
    IdempotencyKey: "req-12345",
    Payload:       jsonPayload,
})

// 启动异步作业
jobResp, err := functionClient.StartJob(ctx, &functionv1.InvokeRequest{
    FunctionId: "player.mass_ban",
    Payload:    payload,
})

// 订阅作业事件流
stream, err := functionClient.StreamJob(ctx, &functionv1.JobStreamRequest{
    JobId: jobResp.JobId,
})
for {
    event, err := stream.Recv()
    if err == io.EOF {
        break
    }
    // 处理 event...
}

EdgeService

包: croupier.server.v1

功能: Edge 代理作业查询

方法

方法请求响应描述
GetJobResultGetJobResultRequestGetJobResultResponse查询作业结果

消息定义

message GetJobResultRequest {
  string job_id = 1;
}

message GetJobResultResponse {
  string state = 1;      // 作业状态
  bytes payload = 2;     // 结果载荷
  string error = 3;      // 错误信息
}

LocalControlService

包: croupier.agent.local.v1

功能: Agent 本地控制面(SDK 到 Agent 的本地注册)

方法

方法描述
RegisterServiceSDK 注册本地服务到 Agent
UnregisterServiceSDK 注销服务

HTTP REST API

Server 同时暴露 HTTP REST API (端口 8080),用于 Dashboard 和 Web 客户端。

基础路径

http://server:8080/api/v1

公共端点

方法路径描述
GET/functions/descriptors获取所有函数描述符
GET/functions/descriptors/:id获取单个函数描述符
GET/functions/instances获取函数实例列表
POST/functions/validate验证函数调用请求
GET/providers/capabilities获取 Provider 能力
GET/providers/descriptors获取 Provider 描述符
GET/packs获取函数包列表
POST/packs/reload重新加载函数包
GET/packs/export导出函数包

请求头

X-Game-ID: mygame       # 游戏 ID (多租户必需)
X-Env: prod             # 环境 (可选)
Authorization: Bearer <token>  # 认证令牌

响应格式

成功响应:

{
  "code": 0,
  "message": "success",
  "data": { ... }
}

错误响应:

{
  "code": 10001,
  "message": "function not found",
  "details": { ... }
}

数据模型

I18nText (国际化文本)

message I18nText {
  string en = 1;  // 英文
  string zh = 2; // 中文
}

Menu (菜单元数据)

message Menu {
  string section = 1;   // 菜单分区
  string group = 2;     // 菜单分组
  string path = 3;      // 路由路径
  int32 order = 4;      // 排序
  string icon = 5;      // 图标
  string badge = 6;     // 徽章
  bool hidden = 7;      // 是否隐藏
}

PermissionSpec (权限规范)

message PermissionSpec {
  repeated string verbs = 1;           // 权限动词: read/invoke/write
  repeated string scopes = 2;          // 权限范围
  repeated RoleBinding defaults = 3;   // 默认角色绑定
  map<string, string> i18n_zh = 10;    // 中文国际化
}

错误码

gRPC 状态HTTP 状态描述
OK200成功
INVALID_ARGUMENT400请求参数无效
UNAUTHENTICATED401未认证
PERMISSION_DENIED403权限不足
NOT_FOUND404资源不存在
ALREADY_EXISTS409资源已存在
RESOURCE_EXHAUSTED429请求过于频繁
INTERNAL500内部错误
UNAVAILABLE503服务不可用

认证与安全

mTLS

所有服务间通信 (Server ↔ Agent ↔ Edge) 强制使用 mTLS。

配置示例:

tls:
  ca_file:   /etc/croupier/ca.crt
  cert_file: /etc/croupier/server.crt
  key_file:  /etc/croupier/server.key

JWT Token

HTTP REST API 使用 JWT 认证。

# 登录获取 token
curl -X POST http://server:8080/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{"username": "admin", "password": "..."}'

# 使用 token 调用 API
curl http://server:8080/api/v1/functions/descriptors \
  -H "Authorization: Bearer <token>"

参考资料

  • Proto 定义: proto/ 目录
  • 服务实现: services/server/, services/agent/
  • HTTP 路由: services/server/internal/handler/routes.go
  • 客户端 SDK: sdks/go/, sdks/cpp/, sdks/java/
在 GitHub 上编辑此页
最后更新: 2026/1/8 05:17
Prev
Protobuf 自定义 Options 使用指南