Я пытаюсь использовать пакет RSTudio/Hadley Wickham 'httr' R для возврата всех записей из запроса GET Okta API ('List Users Assigned to Application'). Следующий запрос отлично работает, чтобы получить максимальный предел записей (500) за вызов:Использование R и httr для извлечения данных - Okta API GET-запрос с заголовками с разбивкой по страницам
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"))))
Разбор «oktagetjson» возвращаемых данных в работоспособное кадра данных с «jsonlite» и R не является проблемой; однако этот конкретный вызов API трудно ограничить максимум 500 записями на звонок, поэтому мне нужно как-то извлечь и разбивать страницы на все заголовки «Ссылка:», чтобы получить все несколько тысяч записей. 'Ссылка:' заголовки сами по себе в виде:
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 описывает их структуру постраничной here)
Я застрял здесь:
- Я могу видеть первые два заголовка «Ссылка:», перечисленные выше в консоли R/RStudio при выполнении вызова «oktagetjson < - with_verbose (контент (GET (oktaurl и т. д. ...) ...) ', чтобы получить мой объект oktagetjston, но' Ссылка: «заголовки не возвращаются как часть самого объекта.
headers(HEAD("https://mydomain.okta.com/api/v1/apps/<applicationID>/users"))
возвращает некоторые заголовки, но не возвращает постраничной «Ссылка:» заголовки - надписью «Ссылка:» заголовки содержат случайные строки курсора, так что я не могу угадать их фактический формат
- Даже если бы я мог получить всю необходимую «Ссылка: ', я понятия не имею, как вызывать/итерации/paginate/рекурсивно следовать через все из них в R, чтобы построить объект всего набора данных из нескольких тысяч записей.
К сожалению, из-за характера запроса, поставщика услуг и данных я не могу представить полностью воспроизводимый пример с реальными ссылками и образцами данных, но я надеюсь, что концепция достаточно ясна, чтобы кто-то указал мне в правильном направлении - даже если это направление не должно использовать пакет «httr» или R для этого усилия.
Благодарим вас за рассмотрение.
Похоже, что они предоставляют вам новый URL для следующих 500 пользователей. Вы пробовали использовать его? – cory
Im работает над своего рода DSL для выполнения http-запросов, которые обертывают 'httr', см. Эту проблему https://github.com/sckott/request/issues/2 для текущей работы, которая отлично справится с вашим случаем использования – sckott
@cory - Да, «следующий» URL-адрес может быть проанализирован из возвращаемого заголовка из GET-запроса, и он работает, чтобы получить следующий набор записей. Теперь мне нужно выяснить, как рекурсивно получить все «следующие» URL-адреса и передать их в «контент» (GET), чтобы получить все записи. Вот где я застрял в данный момент. – Gratalis