gpt4 book ai didi

rest - 使用 REST 实现长时间运行的搜索的最佳实践

转载 作者:行者123 更新时间:2023-12-03 10:13:26 25 4
gpt4 key购买 nike

作为 REST 服务的一部分,我需要实现一个搜索调用。基本思想是用户可以发布一个新的搜索,并获取结果:

POST http://localhost/api/search
GET http://localhost/api/search?id=123

但是,我的搜索可能会运行几分钟,并在完成之前返回部分结果。也就是说,GET-Request 将返回如下内容:
status: running
results: a, b, c.

而下一个 GET-Request 可能会返回
status: completed
results: a, b, c, d, e.

这与 RESTful GET 请求的语义相矛盾。多次调用时,请求应始终返回相同的结果。例如,当用户使用缓存代理时,完整的结果可能永远不会交付给用户。

问题:有什么方法可以为长时间运行的搜索提供真正的 RESTful 实现并带有部分结果?

最佳答案

在执行搜索时,您可以设置适当的响应 header (例如 Expiresmax-age )以指示不应缓存响应(HTTP/1.1 14.9.313.4 )。

搜索结果完成后,您可以发送更合适的 Expires/max-age header 以允许或扩展结果的可缓存性。

重新查询资源的负担将由客户端承担,直到其搜索状态完成。客户端可能会使用 Expires header 的值来确定何时应该重新查询更新的结果。

除此之外,您还可以使用自定义 2XX 状态代码来指示结果尚未完成。也许是 HTTP/1.1 299 In Progress ,或任何有意义的东西。该规范表明 HTTP 状态代码 are extensible .

作为记录,您的声明:

This contradicts the semantics of a RESTful GET request. The request should always return the same result when called several times.



对于 GET 请求,情况并非如此 - 资源可能会发生变化。 GET 请求是幂等的仅意味着“... N > 0 个相同请求的副作用与单个请求相同”。 [spec]

关于rest - 使用 REST 实现长时间运行的搜索的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7730199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com