Rest 为什么我们需要HTTP GET、PUT、POST以外的东西?

Rest 为什么我们需要HTTP GET、PUT、POST以外的东西?,rest,Rest,使用HTTP GET、PUT、DELETE、POST、HEAD的实际好处是什么?为什么不关注他们的行为好处(安全性和幂等性),忘记他们的名字,根据我们想要的行为使用GET、PUT或POST呢 为什么我们不能只使用GET、PUT和POST(以及drop HEAD、DELETE)?

使用HTTP GET、PUT、DELETE、POST、HEAD的实际好处是什么?为什么不关注他们的行为好处(安全性和幂等性),忘记他们的名字,根据我们想要的行为使用GET、PUT或POST呢


为什么我们不能只使用GET、PUT和POST(以及drop HEAD、DELETE)? 只是为了澄清语义上的差异。每个操作都有很大的不同。关键是要有好的HTTP方法,这些方法具有清晰、明确的含义

POST创建新对象。URI没有键;它接受定义对象的消息体。SQL插入。[编辑虽然没有技术上的理由让帖子没有键,但其他人强烈建议,为了让帖子像CREATE一样有明确的含义,它不应该有键。]

获取检索现有对象。URI可能有一个键,这取决于您是执行单例获取还是列表获取。SQL选择

放置更新现有对象。URI有一个键;它接受更新对象的消息体。SQL更新

删除删除现有对象。URI有一个键。SQL删除


你能用POST而不是PUT更新记录吗?不引入一些模糊性。动词应该有明确的效果。此外,POST URI没有键,其中PUT必须有键

当我发帖时,我希望能创建一个201。如果我不明白,就有问题了。同样地,当我输入时,我期望200 OK。如果我不明白,就有问题了

我想你可能会坚持在POST发布或放置的位置存在一些模糊性。URI必须是不同的;关联的消息也可能不同。一般来说,其他人从SQL中得到提示,其中INSERT和UPDATE是不同的动词

如果记录不存在,您可以将UPDATE设置为insert;如果记录确实存在,您可以将UPDATE设置为UPDATE。然而,如果更新意味着更新,而更新失败意味着出了问题,则更简单。返回到INSERT的秘密使操作不明确


如果您没有构建RESTful接口,那么通常只使用GET和POST进行检索和创建/更新。当用户在表单上单击submit时,通常会有URI差异或消息内容差异来区分POST和PUT。但是,它不是很干净,因为您的代码必须确定您是在POST=create案例还是POST=update案例中。

为什么我们需要的不仅仅是POST?它允许数据双向流动,那么为什么需要GET呢?答案与你的问题基本相同。通过标准化各种方法的基本期望,其他流程可以更好地知道该做什么

例如,介入缓存代理可以有更好的机会做正确的事情


例如,想想头。如果代理服务器知道HEAD是什么意思,那么它可以处理前一个GET请求的结果,为HEAD请求提供正确的答案。它可以知道POST、PUT和DELETE不应该被缓存。

并非所有的主机都不支持PUT、DELETE

我问了这个问题,在理想的世界里,我们会有所有的动词,但


限制歧义,这将允许更好/更容易地重用我们的简单REST API。

您只能使用GET和POST,但这样您就失去了PUT和DELETE带来的一些精度和清晰度。POST是一个通配符操作,可能意味着任何东西。 PUT和DELETE的行为定义非常明确。
如果您想到一个资源管理API,那么GET、PUT和DELETE可能涵盖了所需功能的80%-90%。如果您将自己限制为获取和发布,那么40%-60%的api都是使用指定不当的发布来访问的。

早期的web服务器战争可能导致了这一点

在。但正如您在中所看到的,供应商开始添加他们自己的东西。因此,为了保持HTTP的兼容性,他们被迫做出了一些改变

然而,HTTP/1.0没有充分考虑到 分层代理、缓存的影响,以及 持久连接或虚拟主机。此外,扩散 未完全实现的应用程序调用自己 “HTTP/1.0”要求更改协议版本,以便 两个相互通信的应用程序,以确定彼此的真正能力

本规范定义了称为“HTTP/1.1”的协议。该协议包括比HTTP/1.0更严格的要求 确保其功能的可靠实现


使用GET和POST的Web应用程序允许用户创建、查看、修改和删除其数据,但在最初为这些目的而创建的HTTP命令之上的一层执行此操作。REST背后的一个想法是回到Web设计的原始意图,即每个CRUD动词都有特定的HTTP操作


此外,HEAD命令可用于改善(可能较大)文件下载的用户体验。您可以调用HEAD来确定响应的大小,然后调用GET来实际检索内容。

请参见下面的示例。它还建议了一种使用选项http方法的方法,这在这里还没有讨论过。

获取、放置、删除和发布都是从大二学生认为网页可以简化为几个开放原则的时代遗留下来的

现在,大多数网页都是复合实体,其中包含一些或所有这些原始操作。例如,一个页面可以有用于查看或更新客户信息的表单,这些表单可能跨越多个表

我通常在php中使用$\u REQUEST[],并不关心如何使用 ~$ curl -I slashdot.org HTTP/1.1 200 OK Date: Wed, 29 Oct 2008 05:35:13 GMT Server: Apache/1.3.41 (Unix) mod_perl/1.31-rc4 SLASH_LOG_DATA: shtml X-Powered-By: Slash 2.005001227 X-Fry: That's a chick show. I prefer programs of the genre: World's Blankiest Blank. Cache-Control: private Pragma: private Connection: close Content-Type: text/html; charset=iso-8859-1