Web services 具有自定义动词/动作的Web API是RESTful的吗?

Web services 具有自定义动词/动作的Web API是RESTful的吗?,web-services,rest,restful-url,restful-architecture,Web Services,Rest,Restful Url,Restful Architecture,我正在设计一个游戏服务器API,允许玩家花费一些游戏币来“探索”一个区域(随机从该区域获取一些资源)。由于这个API调用扣除了玩家的游戏币,它不是幂等的,也不安全,所以我不能使用GET、PUT、DELETE和leving only POST。所以我的设计是 POST /regions/:id/explore 注意,动词/动作是URI的一部分,而不是HTTP方法。 这个API是RESTful的吗?若有,原因为何?如果没有,这个API的RESTful设计是什么?关于RESTURI是否应该有动词的讨

我正在设计一个游戏服务器API,允许玩家花费一些游戏币来“探索”一个区域(随机从该区域获取一些资源)。由于这个API调用扣除了玩家的游戏币,它不是幂等的,也不安全,所以我不能使用GET、PUT、DELETE和leving only POST。所以我的设计是

POST /regions/:id/explore
注意,动词/动作是URI的一部分,而不是HTTP方法。
这个API是RESTful的吗?若有,原因为何?如果没有,这个API的RESTful设计是什么?

关于RESTURI是否应该有动词的讨论很多,但这只是一种迷信。谈到URI,决定API是否或多或少是RESTful的不是它们的设计,而是客户机如何获得它们。如果您不能随时更改URI,那么这就不是RESTful。如果您的客户机正在从文档中读取URI模式,并用值替换像
:id
这样的字段来构建要使用的最终URI,那么这不是RESTful,URI的内容是什么并不重要。对HATEOAS做一些研究,了解更多信息

有了这一部分,POST是用于任何未被HTTP标准化的操作的方法,这意味着您通常可以做任何您想做的事情,并且仍然可以说它是RESTful的,只要它有明确的文档记录,并且URI不是来自带外信息。根据HTTP标准,您可以猜测GET、PUT、PATCH或DELETE的功能,但无法猜测POST的功能

只是要小心不要让你的帖子像RPC方法一样。例如,当POST应用到的资源由有效负载而不是URI标识时,不要执行某些操作。在您的情况下,类似于:

POST /explore
{"region_id": :id}

这就是避免URI中的动词或方法名的咒语的真正含义

也许这是这个问题的重复-[[1]:你能说得更清楚一点吗?我找不到这个问题的答案?你能在这个问题的上下文中重新表述答案吗?