![]() |
1
5
假设您可以使用您选择的任何框架配置HTTP超时,那么您可以通过GET请求,并只挂起5分钟。 但是,通过POST启动执行、获取收据(数字/ID,无论什么),然后在5分钟后使用GET(如果您的过程不会每次精确花费5分钟,则可能重试)。如果请求仍在进行中,那么返回一个适当的HTTP错误代码(可能是404,但是对于带有非现有收据的GET,您会返回什么?),或者返回结果(如果可用)。 |
![]() |
2
14
这是一种方法。 创建执行processxyz的新请求
如果要查看请求的当前状态:
当请求完成时,您将看到
使用这种方法,您可以很容易地想象以下请求会给出什么。
|
![]() |
3
7
正如BrianAgnew指出的,如果可以控制超时设置,那么5分钟是完全可以管理的,如果有点浪费资源的话。否则,必须至少提出两个请求:第一个请求得到结果生产过程滚动,第二个请求(第三个请求,第四个请求, 等。 ,如果结果编译时间比预期长),则对结果进行轮询。 Brian Agnew和Darrel Miller都为两个步骤的方法提出了类似的方法:将请求发布到工厂端点,在服务器上启动作业,然后从返回的结果端点获取结果。 虽然上面是一个非常常见的解决方案,而且确实遵循了其余约束的字母,但它闻起来非常像RPC。那就是,而不是说,“给我一个这个的代表 资源 ,上面写着“运行这个 工作 “(rpc)然后”为运行作业的结果提供资源的表示形式“(rest)。 编辑: 我在这里说得很随便。说清楚, 所有这些都不能明确地定义REST约束 但它确实非常像在休息的衣服上穿上不休息的衣服,失去了它的好处。( 例如 缓存,等幂)。 因此,我建议当客户机第一次尝试获取资源时,服务器应该以202“已接受”响应。( http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.3 ,可能在响应实体的某个位置使用“5分钟后重试”。此后,客户可以投票 相同的端点 要获得结果,如果可用(否则返回另一个202,稍后再试)。 这种方法的一些额外好处是,不需要不必要地创建一次性资源(如作业),不需要查询两个独立的端点(工厂和结果),同样,也不需要通过解析第一个端点的响应来确定第二个端点,从而更简单。此外,可以“免费”(代码方面)缓存结果。根据结果对于问题域“有效”的时间长度,在结果头中设置缓存过期时间。 我希望我可以将其称为“面向资源”方法的教科书示例,但也许具有讽刺意味的是,“RESTfulWebServices”的第8章提出了两个端点,即工厂方法。算了吧。 |
![]() |
4
4
如果 你控制两端 ,然后你可以做你想做的任何事。例如,浏览器倾向于使用“连接关闭”头文件启动HTTP请求,因此留给您的选项更少;-) 请记住,如果您之间有一些NAT/防火墙,如果它们处于非活动状态一段时间,您可能会有一些断开连接。 我可以建议注册一个“回调”过程吗?客户机向服务器发出带有“回调端点”的请求,得到一个“票据”。一旦服务器完成,它就会“回调”客户机…或者客户机可以通过票据标识符检查请求的状态。 |
![]() |
Dev · 在laravel rest api中按特定角色获取所有用户 2 年前 |
![]() |
IDskxo · 为什么我们需要添加。响应的end()? 2 年前 |
![]() |
KollegeBo · 触发更新的POST或GET 2 年前 |
![]() |
meren · 如何使用react向后端api请求用户提供的值? 2 年前 |
![]() |
CaptTaifun · 如何对“多个”和“单个”对象使用相同的端点? 2 年前 |
![]() |
Zsombor Szende · 汇率api从哪里获取数据?[闭门] 2 年前 |