Я пытаюсь использовать пакет RStudio/Hadley Wickham 'httr' R для возврата всех записей из запроса GET Okta API ('Список пользователей, назначенных приложению'). Следующий запрос отлично работает, чтобы получить максимальное количество записей (500) на вызов:
oktaurl <- "https://mydomain.okta.com/api/v1/apps/applicationID/users?limit=500"
oktagetjson <- with_verbose(content(GET(oktaurl,
add_headers("Authorization" = "bearer myapikey",
"Content-Type" = "application/json;charset=UTF-8"))))
Преобразование возвращенных данных 'oktagejson' в пригодный для использования фрейм данных с помощью 'jsonlite' и R не является проблемой; однако этот конкретный вызов API жестко ограничен максимум 500 записями на вызов, поэтому мне нужно каким-то образом получить и разбить на страницы все заголовки «Link:», чтобы получить все несколько тысяч записей. Сами заголовки Link: имеют вид:
Link: <https://mydomain.okta.com/api/v1/apps/applicationID/users?limit=500>; rel="self"
Link: <https://mydomain.okta.com/api/v1/apps/applicationID/users?after=random cursor string&limit=500>; rel="next"
(Документация Okta API описывает их структуру разбиения на страницы здесь)
Я застрял здесь:
- Я вижу первые два заголовка «Link:» разбивки на страницы, перечисленные выше, в консоли R/RStudio при вызове «oktagejson ‹- with_verbose(content(GET(oktaurl, etc...) ...)», чтобы получить мой oktagejston объект, но заголовки "Ссылка:" не возвращаются как часть самого объекта. Вызов
headers(HEAD("https://mydomain.okta.com/api/v1/apps/<applicationID>/users"))
возвращает некоторые заголовки, но не возвращает заголовки "Ссылка:" разбиения на страницы. - Заголовки «Link:» содержат случайные строки курсора, поэтому я не могу угадать их фактический формат.
- Даже если бы я мог получить все необходимые заголовки «Link:», я понятия не имею, как вызвать/итерировать/разбить на страницы/рекурсивно пройти через все из них в R, чтобы построить объект из всего набора данных из нескольких тысяч записей.
К сожалению, из-за характера запроса, поставщика услуг и данных я не могу предоставить полностью воспроизводимый пример с реальными ссылками и образцами данных, но я надеюсь, что концепция достаточно ясна, чтобы кто-то указал мне правильное направление - даже если это направление не использовать для этого пакет httr или R.
Спасибо за внимание.
httr
, см. этот выпуск github.com/ sckott/request/issues/2 за текущую работу, которая отлично подойдет для вашего варианта использования. - person sckott   schedule 10.03.2016