【问题标题】:Is a Web API with customized verb/action RESTful?具有自定义动词/动作的 Web API 是 RESTful 吗?
【发布时间】:2014-10-28 04:52:53
【问题描述】:

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

POST /regions/:id/explore

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

【问题讨论】:

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


【解决方案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 像 RPC 方法一样。例如,不要在应用 POST 的资源由有效负载而不是 URI 标识的情况下执行某些操作。在您的情况下,类似于:

POST /explore
{"region_id": :id}

这就是避免在 URI 中使用动词或方法名的真正含义。

【讨论】:

    猜你喜欢
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    相关资源
    最近更新 更多