问题更多的是一个哲学问题,即如何处理这种情况?
网络哲学的一部分是,您不需要知道端点是如何实现的:带有预先计算答案的文档与动态计算与重定向到其他人。
所以从纯粹的哲学角度来看,GET 是正确的答案。
GET 不支持内容主体;您唯一的选择是将这个特定计算的结果表示为资源——换句话说,将您的数据放入 URI 中。
实际上,您可能会遇到任意限制 https://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers关于 URI 可以有多长。因此,根据客户端(浏览器/库),这可能是一个问题。
PUT 会很好;相对于 POST 的优点是 PUT 应该是幂等的,使用 PUT 通过统一接口传达您想要的丢失消息语义。
不幸的是,PUT 规范要求替代品具有消息负载的目标资源。这实际上与文件传输有关。也就是说,RFC-7231 https://www.rfc-editor.org/rfc/rfc7231#section-4.3.4确实给你一些回旋余地。
当 PUT 表示与目标资源不一致时,源服务器应该通过转换表示或更改资源配置来使它们一致,或者使用包含足够信息来解释表示为何不合适的适当错误消息进行响应。
因此,您可能会认为计算结果是表示的转换。
PUT 的这种用法与吉姆·韦伯 https://yow.eventer.com/yow-2011-1004/domain-driven-design-for-restful-systems-by-jim-webber-1047谈论.在里面休息币 https://www.infoq.com/articles/webber-rest-workflow演示中,您可以通过 PUT 方法在系统中创建订单来触发业务领域的副作用,这会创建一个用于跟踪该订单状态的资源。
在这种方法中,每个提交的计算都应该有一个唯一的标识符;您可以将输入放入该计算中,它将返回 201 - Created 以及结果。理论上,您可以支持资源上的 GET,以在不需要输入的情况下返回结果,或者支持资源上的 DELETE,作为客户端已收到计算结果并且在服务器上不需要它的一种确认。更长。
或者不是 - 您实际上并不需要它,并且您当然不需要支持每个资源上的所有 http 方法。
如果这种方法不可接受(例如,如果您使用 HTML 作为媒体类型),那么 POST 就是您神奇的包罗万象的方法。它实际上并不适合你想要的东西;但POST必须支持非幂等操作,这意味着统一接口不会识别你的计算是幂等的。在幸福的道路上,这并不是什么大不了的事。