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

时间:2014-10-28 04:52:53

标签: web-services rest restful-url restful-architecture

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

POST /regions/:id/explore

请注意,动词/动作是URI的一部分,而不是HTTP方法。 这个API是RESTful吗?如果是,为什么?如果不是,那么这个API的RESTful设计是什么?

1 个答案:

答案 0 :(得分:1)

关于REST URI是否应该有动词有很多讨论,但这只是一种迷信。对于URI,确定您的API是或多或少RESTful的不是他们的设计,而是您的客户如何获得它们。如果您无法随时更改URI,则表明它不是RESTful。如果您的客户正在从文档中读取URI模式并使用值替换:id之类的字段来构建要使用的最终URI,那不是RESTful,那么URI的内容并不重要是。对HATEOAS进行一些研究以获得更多相关信息。

使用该部分,POST是用于任何未经HTTP标准化的操作的方法,这意味着您通常可以执行任何您想要的操作,并且仍然可以将其称为RESTful,如只要它清楚地记录在案,并且URI不是来自带外信息。您可以根据HTTP标准猜测GET,PUT,PATCH或DELETE的作用,但您无法猜测POST的作用。

请注意,不要像POST方法那样使用POST。例如,不要做有关应用POST的资源由有效负载而不是URI标识的事情。在你的情况下,像:

POST /explore
{"region_id": :id}

这是咒语的真正含义,以避免URI中的动词或方法名称。