优点主要是语义,也可以在一定程度上简化URL.不同的HTTP方法映射到不同的操作:
POST => create a new object DELETE => delete an object PUT => modify an object GET => view an object
然后,理论上,您可以使用相同的 URL,但使用不同的方法与它进行交互; 用于访问资源的方法定义了实际的操作类型.
但实际上,大多数浏览器只支持HTTP GET和POST.Rails使用HTML表单中的一些"技巧"来表现就好像发送了PUT或DELETE请求一样,即使Rails仍在使用GET或POST这些方法.(这解释了为什么你可能没有在其他平台上使用DELETE或PUT.)
优点主要是语义,也可以在一定程度上简化URL.不同的HTTP方法映射到不同的操作:
POST => create a new object DELETE => delete an object PUT => modify an object GET => view an object
然后,理论上,您可以使用相同的 URL,但使用不同的方法与它进行交互; 用于访问资源的方法定义了实际的操作类型.
但实际上,大多数浏览器只支持HTTP GET和POST.Rails使用HTML表单中的一些"技巧"来表现就好像发送了PUT或DELETE请求一样,即使Rails仍在使用GET或POST这些方法.(这解释了为什么你可能没有在其他平台上使用DELETE或PUT.)
这是HTTP 1.1规范的"方法"部分 ; 它定义了许多方法,它们都有不同的好处和权衡.POST
是最灵活的,但权衡很多:它不可缓存(因此互联网的其余部分无法帮助您扩展),它不安全或幂等,因此客户端不能只重新发送它会出错,并且它不再清楚你要完成的是什么(因为它非常灵活).我确信还有其他人,但这应该足够了.考虑到所有这些,如果HTTP规范定义了一个完全符合您的请求要求的方法,则没有理由发送POST
.
原因POST
是如此普遍,至少在历史上,Web浏览器仅支持GET
和POST
.由于GET
被定义为安全且幂等(即使许多应用程序不遵守),修改数据的唯一安全方法是发送数据POST
.随着AJAX和非浏览器客户端的兴起,这已不再适用.
顺便说一下,@ mipadi给出的映射是标准映射,但它不是唯一有效的映射.例如,Amazon S3用于PUT
创建资源.使用的唯一原因POST
是,如果客户端没有足够的知识来创建资源,例如,您使用关系数据库备份资源并使用人工代理键.
当你可以将其内容设置为零字节并且文件系统将其视为删除时,这有点像问为什么"删除"文件.HTTP一直支持除GET/POST以外的动词,但SOAP演变的方式有点扭曲了这些动词的原始含义.REST是一种更简单的回归基础方法,它使用动词,而不是在有效载荷内部发明一些新的动词概念.