Battlesnake 说我的 Battlesnake 使用的是 Battlesnake API 的版本 0。 它说这个版本现已弃用,将来将不再受支持。参考页面告诉我实现 HTTP 调用来玩游戏。
这是Python的原始代码:
@cherrypy.expose
@cherrypy.tools.json_out()
def index(self):
return {
"apiversion": "1",
"author": "your-username",
"color": "#888888",
"head": "default",
"tail": "default"
}
@cherrypy.expose
@cherrypy.tools.json_in()
def start(self):
data = cherrypy.request.json
print("START")
return "ok"
@cherrypy.expose
@cherrypy.tools.json_in()
@cherrypy.tools.json_out()
def move(self):
data = cherrypy.request.json
possible_moves = ["up", "down", "left", "right"]
move = random.choice(possible_moves)
print(f"MOVE: {move}")
return {"move": move}
@cherrypy.expose
@cherrypy.tools.json_in()
def end(self):
data = cherrypy.request.json
print("END")
return "ok"
指令是这样说的:
第 1 步:实施根端点
旧的 POST /ping 端点现已弃用,可以从您的 Battlesnake 中删除。 相反,Battlesnakes 必须实现一个新的 GET / 端点,该端点将返回有关 Battlesnake 的元数据。现在这就是蛇的定制方式以及它们将识别其支持的 API 版本的地方。
{
“API版本”:“1”,
“作者”:“我的用户名”,
“颜色”:“#888888”,
“头”:“默认”,
“尾部”:“默认”
}
第 2 步:更新/启动端点
API 版本 1 Battlesnakes 的游戏引擎将忽略 POST /start 端点中的任何自定义数据。您可以删除当前为响应 /start 请求而发送的任何有效负载。
我无法理解如何进行更改:(
实现 Battlesnake API 的最新参考文档 此时在这里:https://docs.battlesnake.com/api
我建议从 Python Starter 示例开始并从那里开始,因为官方入门包应该是最新的。
对我来说,实际上您似乎已经正确实施了升级 API 处理程序的步骤。 Battlesnake 可能正在缓存信息以了解您的蛇使用哪个 API 版本,您可能只需要更新您的蛇并在部署新代码后刷新,Battlesnake 应该停止抱怨 API 版本。您可以在登录后在 Battlesnake Play 网站上执行此操作,并编辑您的蛇:
但为了完整起见,我将回答如何升级到 v1 的问题。
您引用了文档中的一些说明,所以让我们将其分解为更容易理解的部分。
旧的
端点现已弃用,可以从您的 Battlesnake 中删除。相反,Battlesnakes 必须实现一个新的POST /ping
端点,该端点将返回有关 Battlesnake 的元数据。现在这就是蛇的定制方式以及它们将识别其支持的 API 版本的地方。GET /
{
"apiversion": "1",
"author" :"my_user_name",
"color": "#888888",
"head": "default",
"tail": "default"
}
此步骤涉及删除旧的
/ping
端点,并将其替换为新的 /
端点。您提供的代码不包含路由器,这意味着我无法知道哪些 HTTP URL 模式被路由到您提供的处理程序函数。我假设 CherryPy 的暴露装饰器为你做了这个。我没有看到 ping
函数(旧端点),但确实看到了 index
函数(可能是新端点),并且您已将返回的 JSON 结构更新为新的 API v1 格式,因此处理程序部分应该已经很好了。
@cherrypy.expose
@cherrypy.tools.json_out()
def index(self):
return {
"apiversion": "1",
"author": "your-username",
"color": "#888888",
"head": "default",
"tail": "default"
}
此步骤似乎完成正确。
/start
端点API 版本 1 Battlesnakes 的游戏引擎将忽略
端点中的任何自定义数据。您可以删除当前为响应POST /start
请求而发送的任何有效负载。/start
此步骤解释了在 API v0 中,从启动请求发回的响应很重要,但在 API v1 中,它不再重要。您的处理程序是:
@cherrypy.expose
@cherrypy.tools.json_in()
def start(self):
data = cherrypy.request.json
print("START")
return "ok"
所以看来这一步也是正确执行的。当您除了成功状态之外不需要返回任何内容时,您将返回字符串“ok”。但这样做应该不会有什么坏处。在以前的 API 版本中,您可以在此处包含个性化数据,例如蛇的头部、尾巴和颜色,这些数据现在由根/索引处理程序处理,如步骤 1 中所示。