0

I have found a creative way to deal with paginated APIs when using faraday as an HTTP client. But I am pretty sure this is not the way it should be done. I had a look at the docs but did not find a proper solution. What is the correct way to handle pagination in faraday?

# get all group members
# we need to deal with pagination

get_group_members = connection.get('/rest/api/2/group/member', {groupname: 'jira-servicedesk-users', includeInactiveUsers: false })
group_members_response = JSON.parse(get_group_members.body)
total_pages = group_members_response['total']/50 +1
if total_pages == 0
  group_members = group_members_response['values']
  group_members.each do |member|
    if user_login_date.has_key?(member['name'])
      jsd_user_list[member['name']] = user_login_date[member['name']]
    else
      jsd_user_list[member['name']] = {}
    end
  end
else
  page_counter = 0
  total_pages.times do |page|
    get_paginated_group_members = connection.get('/rest/api/2/group/member', {groupname: 'jira-servicedesk-users', includeInactiveUsers: false, startAt: page_counter })
    paginated_group_members_response = JSON.parse(get_paginated_group_members.body)
    paginated_group_members = paginated_group_members_response['values']
    paginated_group_members.each do |member|
      if user_login_date.has_key?(member['name'])
        jsd_user_list[member['name']] = user_login_date[member['name']]
      else
        jsd_user_list[member['name']] = {}
      end
    end
    page_counter+=50
  end
end

0 Answers0