【问题标题】:Workaround for more REST verbs更多 REST 动词的解决方法
【发布时间】:2014-03-07 19:46:26
【问题描述】:

我正在开发一个帐户有角色的游戏网站。我正在使用路线:

account/{action} //execute `action` on the current account
character/{name}/{action} //execute `action` on specific character

但我需要 deleteundelete(它们是软删除的)字符,虽然使用表单是 delete 的正确方法,但当我可以使用时,它变得不必要(是吗?)膨胀只是指向character/{name}/delete 的 GET 链接。此外,没有用于取消删除/恢复的动词。

什么是解决此问题的正确且简单的方法(或两者兼有)?

【问题讨论】:

  • 你的两条路由已经不是RESTful了。
  • @MattBall 你能开发为什么吗?我对character 路线进行了更改
  • 您的应用程序只是一个简单的网络服务或类似的东西。除非您仔细阅读 REST 原则,否则它永远不会是 REST 应用程序……我认为回答您的问题毫无意义。
  • URL 中的动词 - 一个很大的 NO

标签: rest httpverbs undelete


【解决方案1】:

如果您的 URL 包含名词而不是动词,您可以使用 RESTful 版本,例如:

character/{name}/achievements or

character/{name}/travels

要解决您的活动/非活动帐户问题,您可以这样做:

GET/PUT account/activity

【讨论】:

    【解决方案2】:

    已经不平静了,你正在根据路线而不是动词来确定动作。也就是说,创建一条取消删除的新路线(即字符/{name}/undelete),您已经不是 REST,因此另一条路线无关紧要。如果您正在寻找 RESTful,那么路由应该保留 account/{character} 并且动词确定操作(即 GET、PUT、POST DELETE 到同一路由)。现在,由于您实际上并没有删除,我将学习 POST(或 PUT),即更新实体以删除(或非活动),或将其更新为取消删除(再次活动)

    【讨论】:

    • 其实操作也可以当作资源。举个例子:假设你有一个 Order 资源。订单可通过 /Order/{OrderId} 之类的 URL 寻址(IE:/Order/123 返回订单 123 的表示)。如果我想“购买”该订单怎么办?我不认为拥有像 /Order/123/purchase 这样的 URL 是错误的。 HTTP 方法与操作的幂等性和安全性更相关(基于此,“购买”将是 PUT、POST 或任何其他适合该情况的方法)。在原始帖子中描述的特定情况下,“取消删除”是恕我直言的操作。
    • @juancancela 当然,拥有像/Order/123/purchase 这样的 URL 是“可以的”,但 它不是 RESTful。
    • @MattBall 为什么不平静?更重要的是,您认为管理这种情况的“其他方式”是什么?
    • 我认为你对 REST 太严格了。我倾向于@juancancela 的解释和 Pak 的回答,因为大多数应用程序可能需要的不仅仅是创建/显示/更新所有/销毁
    • @ranisalt 我不同意。 REST 本身是严格的。我建议您花一些时间来准确了解 REST/RESTful 的作用和作用。从stackoverflow.com/q/671118/139010 开始,然后考虑买一本书。
    猜你喜欢
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    • 2018-12-12
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    相关资源
    最近更新 更多