假设我们有一个网站,我们有一个项目列表。在每个项目上,您可以开始几个不同的过程,这将导致与相关项目相关的某些输出。你应该如何设计最合适的http动词?我想要的是每个项目的多个链接,每个链接触发其中一个操作,但在我的场景中与HTTP-VERB get不匹配,如果我使用链接将使用它。另一方面,我不希望所有的按钮都采用不同的动作。
这有点难以解释,但希望您理解,这应该是一些最佳实践。
答案 0 :(得分:4)
你不应该使用GET。 GET请求应为safe,这意味着它们仅用于信息检索,不应更改服务器的状态。 (例如,日志记录之类的东西都可以,但实际更新应用程序状态的事情是禁止的。)想想爬行器会越过你的应用程序。任何你不介意爬行器经过的东西都适合GET,但这听起来不像你的情况(因为你说,“启动几个不同的过程”,但我可能会误解你的用例)。
离开PUT,DELETE和POST。 PUT和DELETE必须是idempotent,这意味着多个相同的请求应该具有与单个请求相同的效果。因此,如果您有更新某人姓名的请求,例如,如果您拨打过一次或100次,该人的姓名仍然是相同的,因此它是幂等的。
POST是最灵活的动词。如果你开始的过程不安全或不是幂等的(或者即使它们是),你可以使用POST,这根本不保证安全性或幂等性。缺点是:
答案 1 :(得分:1)
过去,我使用带有查询参数的POST来指定自定义操作。它在我的用例中是有意义的,因为我有大多数需要传递有效负载的自定义操作。由于您不想使用按钮,您可以使用GET和查询参数来指定不同的操作,但您必须非常小心,您所采取的操作没有任何副作用,并且是幂等的。正如下面@jhericks的评论中所指出的那样,网络中有很多东西假设GET是安全的并且可能重复GET。
从纯粹的RESTful角度来看,这并不理想。您的项目将具有特定的URI,并且URI上的GET将返回项目表示。对项目的运行操作实际上是项目表示状态的变化,应该通过POST(或PUT取决于您询问的人以及您的Web服务器是否支持PUT)来完成。但在现实生活中,使用查询参数是一种简单的解决方法,它可能对您的用例有意义。
答案 2 :(得分:-1)
我不确定我完全理解你的问题。
但这是一个可能对你有帮助的快速段落。
REST是关于制作智能客户端和简单服务器的。 GET,PUT,DELETE表示最低级别的文件访问的基本操作。你应该做的是完全忽略服务器可以提供的任何东西,并将这些工作卸载到客户端上。
所以,问题是,为什么服务器被触发做很多事情。为什么客户不能自己做所有这些事情。
迈克·布朗