Pagination

Keyset (Cursor) Pagination

The following snippet pages through the audit logs, which uses keyset pagination, starting from the most recent entries, 25 entries at a time.

Workflow

  1. Obtain the Posit Connect server URL and API Key from environment variables.
  2. Retrieve the first page of the audit logs via the GET /v1/audit_logs endpoint.
  3. Parse the response using httr::content.
  4. Print the current page.
  5. The paging.next response field indicates the URL for the next page. Load, parse, and print each additional page until paging.next is NULL.

Here is an example of the workflow:

library(httr)

# The connectServer URL must have a trailing slash.
connectServer <- Sys.getenv("CONNECT_SERVER")
connectAPIKey <- Sys.getenv("CONNECT_API_KEY")

# Request a page of up to 25 audit log records.
resp <- GET(
  paste0(connectServer, "__api__/v1/audit_logs?ascOrder=false&limit=25"),
  add_headers(Authorization = paste("Key", connectAPIKey))
)
payload <- content(resp)
# print the current page results
print(payload$results)

# Continue to page through additional records
# while we have a "next" reference
while(!is.null(payload$paging[["next"]])) {
  resp <- GET(
    payload$paging[["next"]],
    add_headers(Authorization = paste("Key", connectAPIKey))
  )
  payload <- content(resp)
  # print the results on this page
  print(payload$results)
}

Offset Pagination

The following snippet pages through the user’s list, which uses offset pagination, 25 entries at a time.

Workflow

  1. Obtain the Posit Connect server URL and API Key from environment variables.
  2. To retrieve the first page of the user’s list, call the GET /v1/users endpoint.
  3. Parse the response using httr::content.
  4. Print the current page.
  5. Increment the requested page_number to load, parse, and print each additional page until no results are returned.

Here is an example of the workflow:

library(httr)

# The connectServer URL must have a trailing slash.
connectServer <- Sys.getenv("CONNECT_SERVER")
connectAPIKey <- Sys.getenv("CONNECT_API_KEY")

# Request a page of up to 25 users.
resp <- GET(
  paste0(connectServer, "__api__/v1/users?page_size=25"),
  add_headers(Authorization = paste("Key", connectAPIKey))
)
payload <- content(resp)

# While the current page has results, print its contents
# then advance to the next page.
while(length(payload$result) > 0) {
  # print the current page results
  print(payload$results)

  # get the next page
  nextPage <- payload$current_page + 1
  resp <- GET(
    paste0(connectServer, "__api__/v1/users?page_size=25&page_number=", nextPage),
    add_headers(Authorization = paste("Key", connectAPIKey))
  )
  payload <- content(resp)
}