TShock高阶应用:REST API

简单来说这是一种全新的给服务器下达指令的方法,只需在浏览器输入连接即可。
REST,即Representational State Transfer的缩写,大意是"表现层状态转化"。它是前后端分离最佳实践,是开发的一套规范,不是框架。
开启REST功能
将config.json中的“RestApiEnabled”改为true,重新开服。
在浏览器访问 “http://127.0.0.1:7878”。如果是服务器,请将127.0.0.1改成你服务器的ip,你将看到如下内容:

获得token(令牌)
访问“http://127.0.0.1:7878/v2/token/create?username=hf&password=1234”,请将 hf 和 1234 是你服务器里的玩家名和对应的密码。
如下图所示,“2251F1D......56A63”就是token,接下来的很多操作都需要提供token。

测试token
访问“http://127.0.0.1:7878/tokentest?token=xxx”可以测试token是否有效,status为200说明有效,status为403说明无效。

token持久化
通过上述方式生成token,将在服务器重启后失效。要想token持久有效,可以直接写进config.json里,下面是配置参考。
如下图所示,你可以设置1个或多个token,甚至可以将token定义成 simpleToken 这种,方便记忆,但为了安全,最好弄一个别人猜不到的token。token对应的用户名和用户所属组,应正确填写。

案例1:查询在线玩家
通过“/lists/players”可以查询在线玩家,http://127.0.0.1:7878/lists/players?token=simpleToken。

案例2:执行命令行指令
要查询在线玩家情况,还可以通过“/v3/server/rawcmd”接口,让服务器执行命令行指令,并返回命令行输出。http://127.0.0.1:7878/v3/server/rawcmd?token=simpleToken&cmd=/playing。
此接口如万金油般地存在,命令行上能做的接口都能做。而且对于服主和玩家来说指令反而比接口要更加亲切。

实践:重置密码
目前我还不知道如何查看用户的密码,有联机的小伙伴忘记密码,我只能通过编辑tshock.sqlite数据库,复制一个新的人物给他,但是接口提供了重置密码的可能。
通过“/v2/users/update”接口重置用户密码,http://127.0.0.1:7878/v2/users/update?token=simpleToken&user=hf&password=1234

更多接口
官方文档列举了不少接口,但个人觉得实用性并不强,很多功能都可以通过 rawcmd 接口来实现,感兴趣的可以去官方文档查询。
官方文档:https://tshock.readme.io/reference
转载:https://www.yuque.com/hufang/bv/reference

更多接口:VSCode
REST API非常有规律,但一个个的参数拼接起来后,地址就变得很长,不易阅读,很容易出错。
实际测试,有使用两个工具。一个是 VSCode + REST Client,另一个是 Postman。我用这这两个工具测试了将近全部接口,大家可以拿来测试,以了解接口使用和特性。
REST Client是一个VSCode插件,可以在VSCode搜索安装。

安装好插件后,新建例如 “TShock-REST-API.http”的文档,其中“.http”是文件的扩展名,然后将下面的代码粘贴进去
所有的接口都保存在这一个 http 文件里,点击链接上方的 “Send Request”文字超链接,可以执行接口请求,并且在右侧面板会返回请求结果。

更多接口:Postman
相比VSCode加插件的方式,Postman使用起来更加清晰优雅,坏处就是录入比较麻烦,而且工具使用起来也有一点门槛。为了让大家能上手使用,我将所有接口导出成json了,在Postman里点击Import按钮,选择json进行导入。

VSCode 和 Postman 的测试物料以及安装包都放网盘了
链接:https://pan.baidu.com/s/1jE3GAK3STdkJL1YgvwD8fw
提取码:rest