繁体   English   中英

如何分叉和合并将 id 列表作为查询参数的 REST API 调用?

[英]How to fork and merge a REST API call that takes a list of id's as query param?

我必须调用第三方 GET API,它采用逗号分隔的 ID 列表并返回 JSON 响应。 像这样:

def call(sysid)
   # RestClient GET  https://test.com?ids=sysid.join(',')&....
   # parse response and returns
   # rescue - any error handling
end

休息客户端

但是 sysid 是一个输入,有时可以有 300+ 个元素,并且由于 GET 的限制,我的 api 调用错误(可能是因为 URL 长度变得太大)

我如何有效地发送 API 次调用(小批量)并将结果合并回来。 在这样做时: -

  • 我应该使用任何并行性吗
    • 如果其中一个批处理调用失败,可能会添加重试
      • 如果仍然失败,停止整个过程并从 call() 返回错误

Ruby 中是否有针对此类问题的良好模式?

我不知道好的 ruby 模式,但我们可以通过以下代码解决问题

def call(sysid)
  fetch_next = true
  response = {status: true, result: []}
  while fetch_next
    param_value_id = sysid[0..n-1]
    while sysid.present?
      begin
        call API with FARADAY/RestClient with its params as param_value_id.join(',')
        if success
          parse response and append in responses result
        else
          fetch_next = false
          response[:status] = false
          response[:result] = []
        end
      rescue Exception => e
        Rails.logger.warn "Exception raised due to #{e}"
        fetch_next = false
        response[:status] = false
        response[:result] = []
      end
    end
    sysid = sysid.drop(n)
    if sysid.empty?
      fetch_next = false
    end
  end
  response
end

解释

  1. fetch_next设置为true并从调用方法返回响应hash。
  2. 直到 fetch_next 为,我们将从sysid获取n 个id
  3. 在 sysid 存在之前,我们将使用预期参数调用第三方 api
  4. 如果响应成功,我们append它在响应结果键hash
  5. 如果有失败异常,我们将设置fetch_nextfalse响应状态键为 false,结果键为
  6. 最后,我们从 sysid 数组中删除n 个值,如果 sysid 为空,则将 fetch_next 设置为false

您可以返回响应 object 或如果状态为 false 则发送特定响应

这是伪代码,但我认为它可能会解决您的问题。

谢谢你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM