【问题标题】:Long GET request on REST API, handling server crashesREST API 上的长 GET 请求,处理服务器崩溃
【发布时间】:2016-01-03 16:04:31
【问题描述】:

我有一个 REST API,其中 GET 请求可能需要 10-20 秒。所以我通常会返回一个202 代码,其位置类似于http://fakeserver/pending/blah,客户端可以在其中检查此请求的状态。 pending/blah 返回一个 200 代码,如果请求仍处于未决状态,则返回一个“状态:未决”,完成后返回一个 303 代码,结果的最终位置:http://fakeserver/finished/blah

但是如果服务器在请求处理过程中崩溃了怎么办? pending/blah 是否应该返回 303 代码,然后 finished/blah 返回 404?如何提醒客户资源可能在某个位置可用,但我不确定?假设请求是持久的,因此当服务器重新启动时,它会继续处理请求。

【问题讨论】:

    标签: rest asynchronous


    【解决方案1】:

    首先,我将处理资源的状态作为该资源的内部字段。通过这种方式,您可以避免使用奇怪的端点,例如:/finished/blah//pending/blah/,而不是引入单个端点 /resources/blah/,它将在其他字段中返回它当前所处的状态。

    将架构更改为上述端点后,如果您要求blah 并且服务器已崩溃,您可以:

    • 返回 200 和 pending 状态 - 客户端不必知道崩溃
    • 返回 404,简单的未找到以及服务器已崩溃的额外消息。
    • 返回 500 并明确告知客户问题所在。

    其他有用的代码也可能是 409 或 503。返回任何 3XX 都不是 IMO 的好主意,因为此处不适用重定向。我个人会选择 200 或 500(3)。

    【讨论】:

    • @SteveD,你觉得我的回答有用吗?
    猜你喜欢
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 2022-10-15
    相关资源
    最近更新 更多