我PUT在我的Rails应用程序中使用了一个请求.现在,PATCH浏览器已经实现了一个新的HTTP动词.所以,我想知道PATCH和PUT请求之间的主要区别是什么,以及什么时候应该使用其中一个.
我正在研究一些todo应用程序,并希望使用HTTP方法PATCH来添加和删除todo,因为这在语义上优于PUT.
在后端我使用express.js(node.js)和前端backbone.js(使用jQuery for ajax).
我已经尝试过,如果它实际上在我的本地开发套件(Archlinux,Chromium 20,node.js 0.8,express 2.X)的后端和前端工作,它工作:
app.js
app.patch('/todo/:id', function(req, res){
console.log('patch successfull');
}
Run Code Online (Sandbox Code Playgroud)
铬网控制台
$.ajax({
url: '/messages/4ff13720f00e2e2c4b000006',
type: 'PATCH',
data: { body: 'that is a patched message' }
});
Run Code Online (Sandbox Code Playgroud)
提到了请求,并且尽可能没有例外地提供数据库操作.
我现在想知道其他浏览器如何支持补丁方法.我看了谷歌,但很难找到一些东西,因为PATCH有多重含义......
我正在使用Java中的基本Servlet实现REST Api,但似乎找不到doPatch()方法。
为什么不HttpServlet实现PATCH方法?我想使用它,因为它对于资源更新更有意义。
我必须为需要双重控制的安全敏感资源设计REST服务.设计实现双重控制的REST服务的优雅方法是什么?
对于双重控制,我的意思是,如果多人(例如2人)参与变更,则变更才会生效.
例如,我有一个名为userProfile的资源.它定义了允许用户执行的所有操作.如果有人想要更改此类个人资料,则可以建议对其进行更改.然后必须验证此更改.此验证的结果是"批准"或"拒绝".一旦变更获得批准,它就会生效.
我目前有一个userProfile资源和一个userProfileChangeProposal资源.
创建一个创建userprofile的提议
POST /userprofiles
Run Code Online (Sandbox Code Playgroud)
这将返回userprofile的ID.现在可以使用{id}进行验证
PUT /userprofiles/{id}/changeproposal
Run Code Online (Sandbox Code Playgroud)
删除或更新userprofile需要再次提交,因此:
DELETE /userprofiles/{id}
PUT /userprofiles/{id}
Run Code Online (Sandbox Code Playgroud)
可以通过以下方式再次验证这些更改:(对于用户配置文件,同时只能有1个提案)
PUT /userprofiles/{id}/changeproposal
Run Code Online (Sandbox Code Playgroud)
我正在努力的事情是,其余的操作似乎在userprofile资源上运行,但事实上他们不这样做.删除不会直接删除资源.它会创建一个删除它的提议.此外,此方法不允许直接删除用户配置文件.
另一方面,如果通过更改提议进行所有更改,则所有创建/删除/更新操作都是正确的
CREATE /userprofilechangeproposal
Run Code Online (Sandbox Code Playgroud)
我没有在互联网上看到有关双控制设计的任何内容.最接近的是有人首先创建ORDER资源,并且只有在订单被批准后才会创建实际的CAR.
任何人都有最佳做法?