繁体   English   中英

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

[英]Why HTTP Rest has different methods like GET, PUT, POST instead of just one or no method at all?

为什么我们对 HTTP 请求有不同的方法。 GET 不能发送数据(正文),只能通过 URL 参数请求某些东西。 Put 就像在服务器上改变一个字段值,Post 每次执行它都会执行一个操作(幂等的概念)。

为什么不能有一种方法或根本没有方法? 为什么不能只有一个简单的 HTTP 请求,我们可以在其中发送数据。 现在它取决于服务器逻辑它希望如何根据请求内容(数据/正文)处理该请求。 如果服务器只想像获取请求一样执行它并返回某些内容,或者执行类似于 POST 请求并返回某些内容的操作。 它会更简单。

为什么不能只存在一个简单的 HTTP 请求,我们可以在其中发送数据(如果需要)

因为这不是 HTTP 的工作方式。 每个 HTTP 请求都有一个必需的请求方法

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

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

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

例如,给定请求的语义受公共方法属性的约束; 如果消息的元数据将自身描述为幂等的,则通用参与者知道,如果响应丢失,他们可以简单地重复消息。

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

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

REST的角度来看,它本身不必是一种方法,只要语义以通用组件可以对其进行操作的方式表达即可。 HTTP 恰好使用了方法

请求方法令牌是请求语义的主要来源; 它指示客户端发出此请求的目的以及客户端期望的成功结果。

你是绝对正确的,没有任何方法会更简单。 但它也不会那么强大:您将失去利用通用组件(如 Web 浏览器、缓存代理)的能力。 元数据约束使网络成为可能。

这都是关于request语义的 来自RFC 7231

请求方法令牌是请求语义的主要来源; 它指示客户端发出此请求的目的以及客户端期望的成功结果。

以下是 RFC 7231 中定义的一些 HTTP 方法的简要说明(单击链接以查看完整的方法定义):

  • GET :传输目标资源的当前表示。
  • HEAD :与GET相同,但仅传输状态行和标题部分。
  • POST :对请求有效负载执行特定于资源的处理。
  • PUT :用请求负载替换目标资源的所有当前表示。
  • DELETE :删除目标资源的所有当前表示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM