scala - scala 中的 RESTful http DELETE 方法(玩 2.0)

标签 scala rest playframework-2.0

我正在使用 Play 2.0 构建应用。
至于 Play 表单生成器不会生成原生 http“Delete”请求方法,它应该被替换为“Get”或“Post”。

@form(routes.Application.delete(id), 'class -> "topRight") {
    <input type="submit" value="Delete this computer" class="btn danger">
}

根据 Play 示例,“发布”应该用于“删除”目的。尽管使用“获取”非常方便,因为可以用一个简单的链接替换表单(尤其是在单个页面上列出这些链接)

那么有没有理由使用 POST 来模拟 DELETE?

最佳答案

使用 POST 来模拟 DELETE 而不是 GET 的原因是因为一些 HTTP 动词(又名方法) 被 HTTP 规范认为是安全的。 These methods are HEAD, GET, OPTIONS and TRACE .这意味着在使用这些 HTTP 方法发出请求时,应用程序状态不应有任何副作用。日志记录、缓存或计数器增量通常不被视为应用程序状态修改,除非它是应用程序域的一部分。

使用 POST 来模拟 DELETE 请求而不是直接在 Web 表单中使用 DELETE 的原因是因为许多浏览器都这样做不支持直接DELETE。许多使用帮助程序生成表单标记的 Web 框架,例如 Play 和 Rails,使用您提到的技巧将请求映射到代码中相应的 REST-ish 操作。参见 HTTP Method Support in Browsers了解更多信息。另请参阅 this SO question有关此主题的更多信息。根据 W3C 最新的 HTML5 候选推荐,HTML5 FORM element does not support values for the method attribute other than GET or POST . FORM element in HTML 4.01也是如此.

关于scala - scala 中的 RESTful http DELETE 方法(玩 2.0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15078323/

相关文章:

java - RESTful servlet URL - web.xml 中的 servlet 映射

scala - case y::ys 是什么意思?

Scala Lift - 如何启动项目

java - 为什么我不能向 Microsoft OneNote 发送 multipart/form-data 请求?

scala - 如何获取客户端IP?

java - Play框架-简单表达式的非法开始

playframework-2.0 - Play 1.2中@Before和@After的Play 2.0等效项是什么?

Scala - 过滤掉 Array[Map[String,Int]] 中的空值

Scala Actor 内存泄漏,它们是否像以前一样糟糕或有所改善?

java - REST API URL 模式设计