相关疑难解决方法(0)

如何在REST API中为"未准备好,稍后再试"选择HTTP状态代码?

我正在开发一个RESTful API,其中http://server/thingyapi/thingyblob/1234返回与thingy#1234相关联的文件(也称为"blob")以进行下载.但可能是请求是在服务器中不存在文件的情况下进行的,但绝大多数情况下都会在以后提供.服务器中有一个批处理过程,可以为所有东西生成所有blob.Thingy 1234已经存在,其数据(blob除外)已经可用.服务器还没有生成东西1234的blob.

我不想要回归404; 那是不存在的东西.这是一个存在的东西,但它的blob尚未生成.有点像YouTube视频的"处理".我认为重定向代码也不合适; 没有"其他"网址可供尝试.

在这种情况下返回的HTTP状态代码是什么?

language-agnostic rest http http-status-codes batch-processing

143
推荐指数
7
解决办法
5万
查看次数

在响应HTTP GET时返回202"Accepted"是错误的吗?

我有一组资源,其表示被懒惰地创建.构建这些表示的计算可能需要几毫秒到几个小时,具体取决于服务器负载,特定资源和月亮的相位.

收到的第一个GET请求开始在服务器上进行计算.如果计算在几秒钟内完成,则返回计算的表示.否则,返回202"已接受"状态代码,客户端必须轮询资源,直到最终表示可用.

出现这种情况的原因如下:如果结果在几秒钟内可用,则需要尽快检索; 否则,当它变得可用时并不重要.

由于内存有限和请求量很大,NIO和长轮询都不是一个选项(我无法保持足够的连接打开,甚至我甚至无法将所有请求都放在内存中;一次"几秒钟"已经过去了,我坚持多余的要求).同样,客户端限制使得它们无法处理完成回调.最后,请注意我对创建一个POST的"工厂"资源不感兴趣,因为额外的往返意味着我们的分段实时约束超出了预期(此外,它是额外的复杂性;此外,这是一种资源,受益于缓存).

我想在返回202"接受"状态代码以响应GET请求方面存在一些争议,因为我在实践中从未见过它,并且它最直观的用法是回应不安全的方法,但我从来没有发现任何特别令人沮丧的事情.而且,我不保持安全和幂等性吗?

那么,人们对这种方法有何看法?

编辑:我应该提到这是一个所谓的商业网络API - 不适用于浏览器.

http-get http-status-codes

80
推荐指数
3
解决办法
4万
查看次数

资源的HTTP状态代码尚不可用

我有一个REST端点接受POST请求以将代码标记为已兑换.代码只能在特定日期之间兑换.

如果有人试图提前兑换代码,我应该如何回应?

我怀疑HTTP 403,故宫,是正确的选择,但随后的W3C规定" 的要求不应该被重复 ",而在这种情况下,我会期待被反复要求,只是在以后的日子.

rest http

18
推荐指数
1
解决办法
7856
查看次数

正在进行的HTTP状态代码?

我的端点看起来像这样:GET:/ v1/resourcebeingcreated/status

是否有一个首选的HTTP状态代码返回(如果此资源的加载/创建正在进行但尚未完成,则返回200以及一个解释"正在进行中"的响应主体)?

如果不是,是在标题或响应正文中返回"进行中"状态的最佳方法吗?

rest http

5
推荐指数
1
解决办法
2038
查看次数

了解REST响应和HTTP状态代码

我想知道如何在REST API中做出响应.

有效示例:

http://blah.com/api/v1/dosomething/123
Run Code Online (Sandbox Code Playgroud)

以上是有效请求,目前我的HTTP状态为200,带有JSON响应

{
    "dosomething": {
        "status": "OK",
        "results": "123"
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,如果传递的参数无效(我期待一个整数字符串),我是否返回HTTP响应200并在JSON响应中传回错误状态,或者我应该传递类似HTTP的内容400响应(错误请求)并在JSON响应中列出请求的错误/问题?

错误示例:

http://blah.com/api/v1/dosomething/123a
Run Code Online (Sandbox Code Playgroud)

JSON响应:

{
    "dosomething": {
        "status": "ERROR",
        "errors": [
            "Value passed: |123a| must be a integer."
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题再一次是我应该在请求传递200或400 HTTP状态,其中传递的参数不是我所期望的?或者,当请求有效时,这应该始终是200响应吗?

什么是最佳做法?

rest json http http-status-codes

1
推荐指数
1
解决办法
7124
查看次数