Php 如何通过RESTAPI处理游戏操作?

Php 如何通过RESTAPI处理游戏操作?,php,api,rest,Php,Api,Rest,我有一个基于PHP的游戏,目前以典型的请求/响应方式工作,生成和输出页面。我希望完全分离表示和游戏逻辑,因此我将移植为基于API的(使用)。这也将使我能够制作一个可以与相同代码库交互的移动应用程序 我不熟悉RESTAPI,所以我尝试遵循中规定的指导原则。据我所知,API的工作原理如下: POST to /v1/users adds a new user. GET to /v1/users returns a list of existing users... and so on. 但是,使用我

我有一个基于PHP的游戏,目前以典型的请求/响应方式工作,生成和输出页面。我希望完全分离表示和游戏逻辑,因此我将移植为基于API的(使用)。这也将使我能够制作一个可以与相同代码库交互的移动应用程序

我不熟悉RESTAPI,所以我尝试遵循中规定的指导原则。据我所知,API的工作原理如下:

POST to /v1/users adds a new user.
GET to /v1/users returns a list of existing users... and so on.
但是,使用我的API的客户机(最有可能通过AJAX)应该只发出更高级别的命令。例如,我不希望精明的用户进行API调用来修改他们的体验。相反,数据修改将是基于玩家输入的游戏操作的副作用

例如,客户端可能会说“嘿,攻击这个怪物”,此时服务器将验证玩家是否有足够的能量,执行攻击,向玩家添加金币和经验,并将结果返回给客户端。这些操作是非常事务性的,需要多个条件为真,并且需要出现多个结果才能认为操作成功

我认为这一功能大致如下:

/v1/attack/player - with the id of the player being a post variable.
/v1/work - with the amount of time being worked as a post variable.
然而,这似乎属于RPC类型的体系结构,正如书中所定义的,我理解为不一样

  • 我如何处理这种情况
  • 我认为RESTAPI适用于此,对吗?我需要调用远程过程的本质似乎与我所阅读的REST完全相反
  • 假设我以错误的心态处理这个问题——是否有其他更适合的架构,或者我应该继续我提到的看到它工作的方式
任何关于我是否朝着正确的方向前进以及我能做得更好的建议都会对我非常有益


谢谢。

我会发送一个
POST/attack
并描述正文中的参数。你可以为每个对手创建链接。因此,这可能适用于简单的游戏,但服务器将无法将数据推送到您的浏览器,除非您使用轮询


对于实时游戏,使用WebSocket的基于事件的方法要好得多…

REST服务对动词GET、PUT等有限制。看来你们需要更多的动词,所以REST不适合你们的应用。我理解你们的意思。我的想法是我可以使用最有意义的动词。我游戏中的一些项目,例如高分,自然会与GET动词匹配。其他的事情,比如攻击一名球员,似乎并不合适——因为这个动作会同时创建和更新各种记录,但仍然可以通过使用POST或PUT来完成。你关于使用POST/attack的建议就是我想到的。我不确定这是否是一个好的做法。而且,我的游戏不是实时的。正常的请求/响应设置对此完全可以。对客户端的任何更新都只会作为请求的结果发生。那么剩下的就足够了。如果您还没有阅读,我建议您阅读本手册的相关部分。RESTAPI的外观有一些限制。例如,您应该将(可能是特定于应用程序的)链接关系添加到您的链接中,并检查是否存在URL结构,等等。。。祝你好运谢谢你的反馈!请您澄清一下,您所说的应用程序特定链接关系是什么意思,并检查它们而不是URL结构?再次感谢。根据/HATEOAS小节,您必须将RESTAPI中的超链接发送回REST客户机。其余的客户端遵循这些超链接以实现其目标(在您的情况下,攻击对手)。要处理超链接,客户端应该检查其语义,而不是URL的结构。语义由链接关系描述,可能是特定于供应商的MIME类型。已经存在很多,但您可以随时添加自己的关系。关于特定于供应商的MIME类型,您可以找到更多信息和。