为什么HTTP Rest有不同的方法,如GET,PUT,POST而不是一个或根本没有方法?

时间:2018-03-16 09:55:20

标签: rest http

为什么我们有不同的HTTP请求方法。 GET无法发送数据(正文),只能通过URL参数请求。 Put就像更改服务器上的字段值一样,Post会在每次执行时执行操作(Idempotence的概念)。

为什么不能有一种方法或根本没有方法? 为什么只有一个简单的HTTP请求,我们可以根据需要发送数据。现在,它依赖于服务器逻辑,它希望如何根据请求内容(数据/主体)处理该请求。如果服务器想要像get请求那样执行它。返回某些内容或执行类似POST请求的操作回报一些东西它本来会更简单。

3 个答案:

答案 0 :(得分:0)

  

为什么只有一个简单的HTTP请求,我们可以根据需要发送数据

因为这不是HTTP的工作方式。 Each HTTP request has a required request method

REST通过重用方法的语义来利用这一点。

答案 1 :(得分:0)

  

为什么不能有一种方法或根本没有方法?为什么不能只有一个简单的HTTP请求,我们可以根据需要发送数据。

因为以一致的方式描述消息的语义允许通用组件以有意义的方式参与。

例如,给定请求的语义受common method properties约束;如果消息的元数据将自身描述为idempotent,则通用参与者知道,如果响应丢失,他们可以简单地重复该消息。

同样,如果已知消息为safe,则每个组件都知道可以推测性地分派消息 - 允许缓存预取您可能需要的表示,与蜘蛛通信内容是安全检索等。

HTTP方法支持更精细的区分; GET vs HEAD,PUT vs DELETE,POST vs PATCH。当然还有extensions也支持其他语义。

REST的角度来看,它本身不一定是方法,只要语义以通用组件可以作用于它的方式表达即可。 HTTP碰巧使用了methods

  

请求方法标记是请求语义的主要来源;它表示客户提出此请求的目的以及客户期望的成功结果。

你绝对没有任何方法可以简单得多。但它也会强大得多:你失去了利用通用组件(如Web浏览器,缓存代理)的能力。元数据约束是使网络成为可能的原因。

答案 2 :(得分:0)

关于请求语义的全部内容。引用RFC 7231

  

请求方法标记是请求语义的主要来源;   它表示客户提出此请求的目的   以及客户对成功结果的期望。 [...]

     

HTTP最初设计为可用作接口   分布式对象系统。请求方法被设想为   将语义应用于目标资源的方式与   将在已标识的对象上调用已定义的方法   语义。 [...]

     

与分布式对象不同,HTTP中的标准化请求方法   由于统一接口提供,因此不是特定于资源的   在基于网络的系统中提高可见性和重用性[REST]。一旦   定义时,标准化方法应该具有相同的语义   应用于任何资源,尽管每个资源都自行确定   是否实现或允许这些语义。 [...]