# 协议规范 本文档定义了 InterConnect-Server 使用的 REST 和 WebSocket 协议格式。所有负载均为 JSON 格式。 ## 认证 (Authentication) - REST: 在请求头中发送 `Authorization: Bearer `。 - WebSocket: 连接到 `ws:///ws?api_key=`(HTTPS 下使用 `wss`)。 ## 事件对象 (Event Object) 事件通过 REST 发送到服务器,并广播给 WebSocket 客户端。 服务器仅验证必填字段和 `event_type` 值。 `data` 负载会原样传递。 必填字段: - `event_type` (字符串) - `server_name` (字符串) - `timestamp` (字符串, ISO 8601) - `data` (对象) 有效的 `event_type` 值: - `player_join` - `player_leave` - `message` - `server_command` 事件示例: ```json { "event_type": "player_join", "server_name": "survival-01", "timestamp": "2024-01-21T12:34:56.789Z", "data": { "player": "Steve" } } ``` ## REST 端点 (REST Endpoints) ### POST /api/events 提交一个事件以进行存储和广播。 请求: - 认证:任意有效密钥 - `Content-Type: application/json` - Body: 事件对象 响应: ```json { "message": "Event received and broadcasted" } ``` 错误: - `400` 如果缺少必填字段或 `event_type` 无效 - `401` 如果 API 密钥丢失/无效 ### POST /api/server/command 发送服务器命令。这也将广播一个 `server_command` 事件。 请求: - 认证:Regular 或 Admin 密钥 - `Content-Type: application/json` - Body: ```json { "command": "say Hello from API", "server_id": "survival-01" } ``` 注意: - 当 Admin 密钥未绑定到服务器时,必须提供 `server_id`。 - 服务器对 Admin 命令强制执行允许/阻止列表。 响应: ```json { "message": "Command sent successfully", "command": "say Hello from API", "server_id": "survival-01" } ``` ## WebSocket 消息 (WebSocket Messages) ### 客户端到服务器 Ping: ```json { "type": "ping" } ``` Pong 响应: ```json { "type": "pong" } ``` ### 服务器到客户端 广播事件: ```json { "type": "minecraft_event", "event": { "event_type": "message", "server_name": "survival-01", "timestamp": "2024-01-21T12:34:56.789Z", "data": { "player": "Alex", "message": "Hello world" } }, "source_key_id_prefix": "a1b2c3d4" } ``` `source_key_id_prefix` 是提交事件或命令的 API 密钥 ID 的前 8 个字符。它不是 API 密钥本身。