我PUT在我的Rails应用程序中使用了一个请求.现在,PATCH浏览器已经实现了一个新的HTTP动词.所以,我想知道PATCH和PUT请求之间的主要区别是什么,以及什么时候应该使用其中一个.
我有一个支持这两个GET和POST请求的资源.这是示例资源的示例代码:
@RequestMapping(value = "/books", method = RequestMethod.GET)
public ModelAndView listBooks(@ModelAttribute("booksFilter") BooksFilter filter, two @RequestParam parameters, HttpServletRequest request)
throws ParseException {
LONG CODE
}
@RequestMapping(value = "/books", method = RequestMethod.POST)
public ModelAndView listBooksPOST(@ModelAttribute("booksFilter") BooksFilter filter, BindingResult result)
throws ParseException {
SAME LONG CODE with a minor difference
}
Run Code Online (Sandbox Code Playgroud)
两个方法中的代码实际上是相同的,除了让我们说变量定义.这两种方法可以很容易地组合使用method = {RequestMethod.POST, RequestMethod.GET},并且if内部简单.我尝试,但它不工作的,因为这两种方法具有不同的参数在末端,即HttpServletRequest和BindingResult(所述@RequestParam的不要求,因此在不需要的POST请求).任何想法如何结合这两种方法?
我正在关注Michael Hartl的Rails教程,并且出于某种原因以下代码:
<%= link_to 'delete', user, :method => :delete, :confirm => "You sure?",
:title => "Delete #{user.name}" %>
Run Code Online (Sandbox Code Playgroud)
发出GET请求(我通过检查rails服务器日志来验证).我还验证了以下行在我的应用程序视图中:
<%= javascript_include_tag :all %>
Run Code Online (Sandbox Code Playgroud)
有一点我不太明白,这可能是我的问题的根源:定义的"删除"方法在哪里?我在Hartl的源代码中验证了他在控制器中定义了"destroy"方法,而不是"删除".但即使我将link_to更改为:method =>:destroy,它也会发出GET.
我正在使用Rails 3.1.有小费吗?
Rfc2616列出了除GET和POST之外的许多方法,比如DELETE,PUT等.但是,html格式的方法字段似乎只允许指定GET或POST.
是否可以在使用非GET或POST的请求方法的html页面中创建链接或表单?
我有一个PHP Facebook应用程序,我已经上传到Microsoft服务器.当我运行应用程序时,我收到此错误.有人知道这个的原因吗?
405 - 不允许用于访问此页面的HTTP动词.无法显示您要查找的页面,因为使用了无效的方法(HTTP谓词)来尝试访问.
我有一个有计数器的资源.为了举例,让我们调用资源配置文件,计数器是该配置文件的视图数.
根据REST维基,PUT请求应该用于资源创建或修改,并且应该是幂等的.如果我正在更新配置文件的名称,那么这种组合很好,因为我可以发出一个PUT请求,将名称设置为1000次,结果不会改变.
对于这些标准PUT请求,我有浏览器做类似的事情:
PUT /profiles/123?property=value&property2=value2
Run Code Online (Sandbox Code Playgroud)
对于递增计数器,可以像这样调用url:
PUT /profiles/123/?counter=views
Run Code Online (Sandbox Code Playgroud)
每次调用都会导致计数器递增.从技术上讲,这是一个更新操作,但它违反了幂等性.
我正在寻找指导/最佳实践.你刚才这样做了吗?
想要为基于REST的API使用相同的URL进行GET/PUT/DELETE/POST,但是当关于Actions的唯一不同之处是它接受哪个HTTP谓词时,它认为它们是重复的!
"Type已经定义了一个名为'Index'的成员,它具有相同的参数类型."
我说的是什么呢?这个只接受GET,这个只接受POST ...应该可以共存吗?
怎么样?
我目前正致力于实现REST API.我有一个资源模型,在各个资源之间有很多关系.
我的问题是:如何以RESTful方式将两个现有资源相互链接(建立关系)?
我遇到的一个解决方案是使用LINK和UNLINK HTTP动词.API使用者可以使用LINK和以下URI链接两个资源:/ resource1 /:id1/resource2 /:id2.
此解决方案的问题是缺少对LINK和UNLINK动词的支持.http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html或http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol都没有提到动词,它们似乎在很大程度上被"遗忘"了.但是,最初的RFC 2068确实声明它们存在.
我非常喜欢这个解决方案.但是,由于缺乏对LINK/UNLINK的支持,我担心许多API消费者/客户将无法处理该解决方案.这是一个可接受的解决方案,还是有更好的和/或更优雅的解决方案来链接RESTful API中的现有资源?
谢谢
如果我已经使用[AcceptVerbs(..)]属性修饰了我的动作方法,我是否必须在路线定义中注册HttpVerb约束(当我注册路线时)?
例如.我有这个.
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(FormCollection formCollection)
{ .. }
Run Code Online (Sandbox Code Playgroud)
我是否需要将此添加到引用此操作的路由中,作为约束?
http-verbs ×10
http ×3
asp.net-mvc ×2
rest ×2
acceptverbs ×1
action ×1
api ×1
html5 ×1
http-delete ×1
hyperlink ×1
overloading ×1
patch ×1
put ×1
rfc2616 ×1
routes ×1
spring ×1
spring-mvc ×1