我有一个Rails API,它可以处理来自客户端的请求。客户端使用该API来执行数据分析。客户端将数据发布到API,API检查这些数据是否曾经被分析过。如果是这样的话,API只需响应分析结果。如果在API之前还没有对数据进行分析:
对我来说,主要的问题是设置这样的方式,使客户端在执行请求后就可以以某种方式接收“您的数据已被发送到分析”的消息。然后,当分析完成时,客户就可以得到它的结果。
问题是,在这种情况下,我必须采取什么方法?异步响应,延迟响应,其他什么?有什么已知的解决办法能帮到我吗?有宝石吗?
我对这件事不熟悉,所以如果我问了些愚蠢的问题,我真的很抱歉。
发布于 2017-01-20 10:35:03
如果使用HTTP,则只能对每个请求有一个响应。要发送多个响应,即“正在进行中的工作”,然后再发送“结果”,您需要使用不同的协议,例如web套接字。
由于HTTP非常常见,所以我会将其与后台作业结合使用。有几种选择在脑海中浮现。
API可能有两个URLS:/api/jobs/new和/api/jobs/<ID>。在Rails中,它们将映射到一个新的控制器并显示动作。
无论哪种方式,如果使用HTTP,您将无法在请求/响应中处理整个事件,您将不得不使用某种背景处理(因此,对微服务的请求发生在不同的进程中)。例如,你可以看看Sidekiq。
下面是一个轮询示例:
网址: example.com/api/jobs/new
SecureRandom.uuid生成唯一的id。--
背景作业
--
网址: example.com/api/jobs/UUID
发布于 2017-01-20 10:34:40
取决于您使用的API类型。我假设您的客户通过HTTP进行交互。
如果您想要在HTTP上构建一个异步API,首先要做的事情是:接受请求,创建一个作业,在后台处理它,然后立即返回。
要使客户端获得响应,您必须选择两个选项:
背景处理的一个良好开端是Rails附带的侧方宝石或更通用的ActiveJob。
https://stackoverflow.com/questions/41761120
复制相似问题