[英]REST: Why expose POST and PUT endpoint of API when both can be done with just any one of these endpoints?
[英]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 浏览器、缓存代理)的能力。 元数据约束使网络成为可能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.