Rest 如何调用非GET/POST HTTP方法?

Rest 如何调用非GET/POST HTTP方法?,rest,playframework,playframework-2.0,Rest,Playframework,Playframework 2.0,我有一个RESTful Play 2.0应用程序,我想通过浏览器中的链接调用DELETE/sessions 我该怎么做?Rails有一个惯例,即对非GET/POST请求使用\u方法查询参数,但Play的文档没有提到这一点 另外,我是否必须创建一个单独的表单或XMLHttpRequest,以便从链接的href调用该方法,或者是否存在类似Rails的数据方法属性的内容?对于公共链接,您不会这样做 : 链接(标记)不适用于DELETE方法。语义 链接的作用是“链接”到另一个可以检索的资源 使用GET请

我有一个RESTful Play 2.0应用程序,我想通过浏览器中的链接调用
DELETE/sessions

我该怎么做?Rails有一个惯例,即对非GET/POST请求使用
\u方法
查询参数,但Play的文档没有提到这一点


另外,我是否必须创建一个单独的表单或
XMLHttpRequest
,以便从链接的
href
调用该方法,或者是否存在类似Rails的
数据方法
属性的内容?

对于公共链接,您不会这样做

:

链接(标记)不适用于DELETE方法。语义 链接的作用是“链接”到另一个可以检索的资源 使用GET请求。您可以在Ajax或表单中删除请求 使用POST方法并包含名为的隐藏输入 “X-HTTP-Method-Override”和值“DELETE”

这是什么意思:您需要使用GET删除该项:

conf/routes
中:

GET   /delete/:itemId    controllers.Application.deleteItem(itemid : Long)
在你看来:

<a href="@routes.Application.deleteItem(item.id)">Delete @item.name</a>

或者使用AJAX调用:

<script type="text/javascript">
    $.ajax({
        url:"@routes.Application.actionToDeleteSomething()",
        type:"DELETE"
    });
</script>

$.ajax({
url:“@routes.Application.actionToDeleteSomething()”,
类型:“删除”
});

您将无法使用公共链接执行此操作

:

链接(标记)不适用于DELETE方法。语义 链接的作用是“链接”到另一个可以检索的资源 使用GET请求。您可以在Ajax或表单中删除请求 使用POST方法并包含名为的隐藏输入 “X-HTTP-Method-Override”和值“DELETE”

这是什么意思:您需要使用GET删除该项:

conf/routes
中:

GET   /delete/:itemId    controllers.Application.deleteItem(itemid : Long)
在你看来:

<a href="@routes.Application.deleteItem(item.id)">Delete @item.name</a>

或者使用AJAX调用:

<script type="text/javascript">
    $.ajax({
        url:"@routes.Application.actionToDeleteSomething()",
        type:"DELETE"
    });
</script>

$.ajax({
url:“@routes.Application.actionToDeleteSomething()”,
类型:“删除”
});

似乎正确。但是,我要说,这种特定于客户端的问题不能反映在服务器上。此外,REST范式现在已经被打破。因此,应该做的不是使用标记,而是使用一个呈现为链接的实例。并在路由中保留删除。或者至少,让GET和DELETE都保持在路由中,目标是同一个控制员谢谢答案,但我同意Andy的观点,添加专用URL感觉是错误的。我所做的只是将
DELETE
方法保留在
routes.conf
中,然后,当用户单击链接时,调用JavaScript函数,通过成功回调对DELETE方法进行Ajax调用,该回调将document.location.href设置为目标页面。仍然有黑客行为,但这会使客户端变得丑陋,并使其余部分保持不变。您不应该删除
GET
http请求中的资源。@JulienRichard Foy:那怎么办?每个删除操作的表单或ajax?是<代码>获取操作应该没有副作用。似乎正确。但是,我要说,这种特定于客户端的问题不能反映在服务器上。此外,REST范式现在已经被打破。因此,应该做的不是使用标记,而是使用一个呈现为链接的实例。并在路由中保留删除。或者至少,让GET和DELETE都保持在路由中,目标是同一个控制员谢谢答案,但我同意Andy的观点,添加专用URL感觉是错误的。我所做的只是将
DELETE
方法保留在
routes.conf
中,然后,当用户单击链接时,调用JavaScript函数,通过成功回调对DELETE方法进行Ajax调用,该回调将document.location.href设置为目标页面。仍然有黑客行为,但这会使客户端变得丑陋,并使其余部分保持不变。您不应该删除
GET
http请求中的资源。@JulienRichard Foy:那怎么办?每个删除操作的表单或ajax?是<代码>获取操作应该没有副作用。