第 2 级 · 进阶指南
你的实例可以提供一个小型 HTTP API,让脚本、游戏引擎和程序化工具读写整张地图,无需浏览器。你可以借此让 Unity 生成地图、按计划备份地图,或从自己的流水线中编辑它们。身份验证使用你掌控的单个令牌。
打开设置,找到自动化 API,点击生成令牌。将令牌复制到安全的地方:它是你地图的钥匙。你可以随时重新生成它(会立即使旧令牌失效),或彻底禁用 API。如果你更愿意通过环境设置它,请提供 API_TOKEN,它将接管,设置页中的字段会变为只读。
每个请求都在 Authorization 标头中携带你的令牌。没有有效令牌的请求会被拒绝。请对令牌保密:拥有它的任何人都能读取并覆盖你的地图。
Authorization: Bearer YOUR_TOKEN
每个端点都位于你自己实例上的 /api/v1 之下,无论你在何处运行它(例如本地运行时的 http://localhost:8080,或你服务器的域名)。下面的示例使用 https://your-instance.example.com 作为占位符:请替换为你的地址。
GET /api/v1/maps
返回实例上的每张地图,附带文件大小和最后修改时间。
curl -H "Authorization: Bearer YOUR_TOKEN" \
https://your-instance.example.com/api/v1/maps
GET /api/v1/maps/{name}
以 JSON 形式返回完整地图,格式与导出所得相同。可将其保存为文件、加载到 Unity,或在版本控制中比较差异。
curl -H "Authorization: Bearer YOUR_TOKEN" \
https://your-instance.example.com/api/v1/maps/world -o world.json
PUT /api/v1/maps/{name}
从 JSON 请求体上传整张地图。如果地图是新的则创建它(201);如果已存在则替换它(200)。任何正在浏览器中编辑该地图的人都会被重新加载到新版本。生成器、Unity 或程序化工具就是这样把地图写回的。
curl -X PUT \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
--data @world.json \
https://your-instance.example.com/api/v1/maps/world
DELETE /api/v1/maps/{name}
永久删除一张地图。没有撤销,所以如果你以后可能还想要它,请先通过读取做一次备份。
curl -X DELETE \
-H "Authorization: Bearer YOUR_TOKEN" \
https://your-instance.example.com/api/v1/maps/world
POST /api/v1/maps/{name}/rename · POST /api/v1/maps/{name}/duplicate
重命名地图(发送 { "to": "new-name" }),或以新名称复制它(发送 { "to": "..." },或省略以获得自动的 -copy 名称)。
curl -X POST \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
--data '{"to":"old-world"}' \
https://your-instance.example.com/api/v1/maps/world/rename
读取和写入使用与导出完全相同的 JSON:一个包含 zones、layers 和 layerOrder 的对象。每个字段请参见地图文件格式。只要写入包含 layers(或旧版顶层 tiles),即被接受。
错误返回一个类似 { "error": "..." } 的小型 JSON 对象,并带有相应的 HTTP 状态:
200 / 201:成功(已替换 / 已创建)。400:请求体不是有效的地图。401:令牌缺失或错误。404:地图不存在,或因未设置令牌而 API 被禁用。409:重命名的目标名称已被占用。一个使用 UnityWebRequest 将地图拉取到 Unity 的最小 C# 协程。响应文本即完整的地图 JSON,可直接解析并转换为地形。
using UnityEngine;
using UnityEngine.Networking;
using System.Collections;
IEnumerator FetchMap(string baseUrl, string token, string name) {
using var req = UnityWebRequest.Get($"{baseUrl}/api/v1/maps/{name}");
req.SetRequestHeader("Authorization", "Bearer " + token);
yield return req.SendWebRequest();
if (req.result == UnityWebRequest.Result.Success)
Debug.Log(req.downloadHandler.text); // the full map JSON
else
Debug.LogError(req.responseCode + " " + req.error);
}
把令牌当作密码对待:不要放进共享仓库和公开构建中,一旦泄露就重新生成它。由于 API 只读写整张地图,最安全的自动化模式是读取、修改、写回。