SOAP 在使用 HTTP 作为传输机制时,通过 HTTP POST 请求发送。由于 HTTP POST 是非幂等的,它不会在 HTTP 级别缓存。
REST可以被缓存,前提是所讨论的请求是幂等的:GET、PUT 和(理论上)DELETE。任何 POST 请求仍然不会被缓存。也就是说,如果您打算对此进行大量工作,则应该研究缓存如何检查它们是否仍然有效。特别是,如果您有一种廉价的方法来计算应该是什么值,那么ETag 标头将是实现缓存的好方法。
仅仅是因为 REST 按照惯例对 url 中的所有参数进行了编码吗?由于 GET 调用也可以有一个带参数的主体,我知道它不受 REST 限制,但如果你这样做缓存机制不起作用?
REST 没有规定如何在 URL 中编码请求参数的任何特定机制。建议客户端永远不要进行任何 URL 合成:让服务器完成所有 URL 创建(通过您想要的任何机制,例如嵌入到路径中或作为查询参数)。您绝对不应该做的是有一个 GET 客户端将正文发送到服务器!任何缓存都可能丢失它。相反,当该请求不对应于某个资源的简单获取时,您可以将该复杂文档 POST 或 PUT 到服务器并 GET 操作结果作为单独的阶段。
将操作结果作为另一个复杂文档返回的复杂文档的 POST 几乎就是 SOAP 的编码方式。如果您很想这样做,您不妨直接使用 SOAP,因为它在许多语言中都有更成熟的工具。如果你想以这种方式运行 REST,你可能在某个地方做错了……</p>