@wilson_espinosa ,
How would you know that you need to go to page 30? You would have no idea that it was page 30 until you got there since you have no idea how many page views there are. Once you are there and you know that it's page 30, you can save the bookmark from the current link header or even the URL of the page and get back there immediately, even when page 30 is no longer page 30 because more page requests have come in since then and it's now page 34. I do not know how long bookmarks remain valid, but I don't suspect that they're generated until you actually need it. In other words there is no bookmark for page 30 until you visit page 29 and it generates it for the link headers.
If you are needing page 30 in a list of page views, it's much more likely that you're after a set of page views from a specific time period. The start_time and end_time query parameters are already part of the API call. The way to get to a specific page is to limit the start and end times to a specific enough period that it takes you right to that spot.
I don't know for sure if/when page views used to use the page parameter and then switched to bookmarks. However, looking at the source code commits over time, it looks like it probably was page-based at one time.
I have two guesses for when that changed.
Looking at most of the code, it suggests that changed on May 12, 2012. On April 17, 2012, code that provided the total count of the number of page views was removed. At that same time, a note was added to the pagination documentation about the last link header and it not being sent if there are no pages or it would be expensive to calculate the number of pages. The page view tables within the web UI was modified to dynamically load the page views rather than automatically loading all of them. However, the spec file still showed page=2 as a query parameter on an API call to load the page views and that is still there today. Even though the page count was removed from the users controller at that time, the page parameter was still being sent until November 2012. Those changes removing the total page count were released on May 12, 2012.
Before that, commits made on October 15, 2011, and released on March 3, 2012, set the page views per_page to 50, but were still passing the page parameter to the pagination.
Later, commits made on September 20, 2012, and released on November 3, 2012, switched the page views to use the Backbone/Paginated Collection, but it said that there were no user-visible changes. That is not an API call, but it is when the page_views was taken out of the users controller. That was the code where the page parameter was still being passed, so this is when it stopped being used in the user page views within the web interface.
By the way, those changes to allow the start_time and end_time were committed on July 18, 2013, and released on August 24, 2013.
My second guess is based on a single comment in a commit made on September 24, 2012, and released on November 24, 2012. That's when the page views begin being stored on a Cassandra cluster. That changed the way things are handled and the note was "note that the format of the pagination headers in the /api/v1/users/X/page_views endpoint has changed."
Whether in May 2012 or November 2012, it looks like the page parameter for page_views through the API hasn't been used in over 5 years.
The first I used page views for anything useful (seeing whether my students were viewing pages) was in June 2015. At that time, I was blindly following the next link header as I was making serial calls. It wasn't until later that I discovered that I could hack the system and fetch multiple pages at the same time by using the page query parameter. At that point, I discovered it doesn't work with page views.
The documentation for API pagination doesn't define the availability page= versus bookmark=, it just uses an opaque identifier.
To retrieve additional pages, the returned `Link` headers should be used. These links should be treated as opaque. They will be absolute urls that include all parameters necessary to retrieve the desired current, next, previous, first, or last page. The one exception is that if an access_token parameter is sent for authentication, it will not be included in the returned links, and must be re-appended.
In other words, Canvas didn't intend for us to modify those links. What we're trying to do is leverage knowledge about the way that Canvas works in some places as an undocumented, unsupported work-around.
While you can't hack the page= parameter with page views, you can limit the time period that it returns page views for. That's actually more powerful functionality than being able to jump to a specific page in a list of unknown length in the first place.