相关疑难解决方法(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状态代码

我正在重新设计我的小企业网站.我将建立一个暂时"正在建设中"的启动页面.我知道,我知道......但我希望它会成为一种风格.:)

什么,主要是出于搜索引擎优化的目的,是最好的HTTP状态代码,用于显示暂时不可用的URL(相同的URL将在新网站启动后再次拥有内容).

现在,我的网站流量几乎没有任何重要性,但作为一名网络开发者,我希望在我的工具箱中获取这些知识,以便将来可能的客户项目.还有什么更好的方法来测试和试验这个,现在我对自己的网站有一个方便的"理由".

这里有一些我想过的:
503看起来很吸引人,但属于服务器错误类别.
204看起来也很吸引人,但我宁愿暂时重定向到启动页面.
307看起来是最好的选择,但我不完全确定.

还有其他几个.所以我很想听听你的意见.谢谢

http http-status-codes

70
推荐指数
1
解决办法
3万
查看次数

为什么我应该使用异步/非阻塞框架构建API?

我一直在研究Play Framework作为帮助我构建简单API的可能候选者.然而,Django Rest Framework(DRF)似乎也是一个非常强大的竞争者.

据我所知,DRF并不像Play Framework那样宣传自己是异步(或非阻塞)框架,但我对这是否重要感兴趣.我一直在考虑的情况是通过Mandrill向用户发送电子邮件 - 我不希望我的API陷入困境,等待Mandrill API告诉它是否发送了电子邮件.

因此,我认为这个问题可以概括为:客户的观点是否有益于我使用异步/非阻塞框架(如Play over the DRF)构建API,或者我错过了这一点?

api asynchronous playframework django-rest-framework

14
推荐指数
2
解决办法
6217
查看次数

REST请求的方法,执行时间长?

我们正在构建一个REST服务,大约需要5分钟才能执行.它只会被内部应用程序每天调用几次.是否存在使用REST(即:HTTP)请求需要5分钟才能完成的问题?

我们不得不担心超时吗?我们应该在服务器上的单独线程中启动请求并让客户端轮询状态吗?

rest asynchronous web-services

8
推荐指数
3
解决办法
1万
查看次数

REST API中的HTTP状态代码,用于使用GET查询"尚未准备好,稍后再试"资源?

首先,我读了一些相关的帖子:

但我仍然认为我应该在这里提出我的问题和想法.REST API中的HTTP状态代码应该是什么?使用GET到QUERY"未准备好,稍后再试"资源?例如,客户端尝试通过对此URL进行HTTP GET来查询将来发生的所有本地新闻(!):http://example.com/news?city = chicago& date = 2099-12-31那么服务器应该回复什么?

这些是我考虑的http状态代码,它们的rfc定义以及为什么我不完全满意:

  • 3xx重定向.注释:不是一个选项,因为没有其他链接可以重定向到.

  • 503服务不可用:由于服务器临时过载或维护,服务器当前无法处理请求.这意味着这是一个暂时的条件,经过一段时间的延迟后会得到缓解.如果已知,则可以在Retry-After报头中指示延迟的长度.注释:需要重试行为,但从语义上讲,情况根本不是服务器的错误,因此所有5xx看起来都很奇怪.

  • 4xx客户端错误.评论:看起来很有希望 见下文.

  • 413请求实体太大:服务器拒绝处理请求,因为请求实体大于服务器愿意或能够处理的请求实体....如果条件是临时的,服务器应该包括一个Retry-After头字段,以指示它是临时的,以及客户端可以再次尝试的时间.注释:需要重试行为,但"实体太大"部分有些误导.

  • 417期望失败:此服务器无法满足Expect请求标头字段(请参阅第14.20节)中给出的期望.注释:所以它应该是由Expect请求标头引起的,不适用于我的情况.

  • 406 Not Acceptable:资源...根据请求中发送的accept头不可接受.注释:所以它是由Accept request-header引起的,不适用于我的情况.

  • 409冲突:由于与资源的当前状态发生冲突,无法完成请求.此代码仅在预期用户可能能够解决冲突并重新提交请求的情况下才允许....响应PUT请求最有可能发生冲突.评论:这个很接近.虽然我的情况不是关于PUT,实际上并不是由冲突造成的.

  • 404 Not Found:服务器未找到与Request-URI匹配的任何内容.评论:从技术上讲,我的网址路径(http://example.com/news)存在,它是导致问题的参数.在这种情况下,返回空集合而不是404,可能更合适.

  • 403 Forbidden:服务器理解请求,但拒绝履行请求.授权无效,请求不应重复.评论:通常这应该用于任何受限制的资源?

  • 400错误请求:由于语法格式错误,服务器无法理解请求.客户端不应该在没有修改的情况下重复请求.评论:在我的案例中并非如此.我的服务器理解请求,它的语法很好,只有意思不好.

  • 2xx成功.评论:如果4xx不起作用,2xx怎么样?见下文.

  • 200好的.评论:很好.那么我应该在响应体中包含什么呢?null或[]或{}或{"date":"2099-12-31","content_list":null}或者......哪一个更直观?另一方面,我更喜欢一种方法,以明确区分未成年人"未来新闻"错误与更常​​见的"所有查询标准都很好,这一天没有新闻"的情况.

  • 202 Accepted:已接受请求进行处理,但处理尚未完成.该请求最终可能会或可能不会被采取行动.注释:假设我们可以在GET请求中使用202,则可以接受.然后参考200评论.

  • 204 No Content:服务器已完成请求,但不需要返回实体.注释:假设我们可以在GET请求中使用204,则可以接受.只是不知道这是否优于202或200.

  • 更多关于2xx: …

rest http-get

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

ReST:用于在 201 Created 后轮询资源的 http 204 状态代码

我有一个创建资源的请求 (POST)。此资源需要很长时间才能创建(最多几个小时),但它的 id 会立即创建。

在我看来,最合适的流程是:

  • POST /thing - 响应为 201 使用“位置标头字段给出的资源的 URI”创建(根据http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

  • 开始轮询 GET /thing/id 响应应该是:

    • 只要资源还没有准备好 - 204 No Content

    • 一旦资源准备好 - 200 OK 与在响应正文中返回的资源

我正在寻求意见/建议,因为我的意见基于(大量)阅读而不是经验,这似乎与大多数建议不同,最初返回 202 Accepted 并仅在响应 http DELETE 时使用 204

rest http

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