在 Ruby 中拆分和循环

split and loop in Ruby

我是 ruby 的新手,但我试图解决的问题有点合乎逻辑。

我得到的用户列表大约有 3000 个。 但是 api 支持响应限制为 250,而且它不支持分页或偏移。 所以我必须在一个循环中点击这个 api 这样每次我都会得到 250 条记录直到我达到 3000 条记录。 在每一轮中,我都会为它分配一些属性。

api 是获取用户列表的获取请求。 api url: {{baseUrl}}/accounts/:id/users?limit=250&offset=0&count=true

api says - offset is record based, not page based,

How can I requests for users such as: First call for 0 to 250 then 250 to 500 then 500 to 750 till we reach the max count.

为了概括这一点,我认为无论我得到多少,它都应该遍历所有并分配属性。

可能正在使用 Range#step

require 'uri'
require 'net/http'

(0..3000).step(250) do |offset|
  uri = URI("#{base_url}/accounts/users?limit=250&offset=#{offset}")
  res = Net::HTTP.get_response(uri)

  puts res.body if res.is_a?(Net::HTTPSuccess)
end

或者可以这样 endless range

(0..).step(250) do |offset|
  uri = URI("#{base_url}/accounts/users?limit=250&offset=#{offset}")
  res = Net::HTTP.get_response(uri)

  if res.is_a?(Net::HTTPSuccess)
    puts res.body
  else
    break
  end
end

你也可以在块中使用redo来重复错误的请求

您可以使用 Numeric#step 枚举偏移序列 [0, 250, 500... 2750]。然后,假设 get_stuff returns 和 Array,您可以使用 Enumerator#flat_map:

拼接结果
stuff = 0.step(by:250, to:2999).flat_map do |offset|
  get_stuff(offset, 250)
end