Problem
In T178715 we discovered that we needed to get a list of all of the pages a user has touched. It doesn't matter how many times the user has edited a page, we need to know if that user has ever edited a page at any point in history.
As an example, if User A edits a page in 2012 and User B edits a page in 2017 and I am looking for revisions in 2017, we would need to know that User A edited the page (at some point in time), even though we are only requesting revisions in 2017.
The request for getting this information is something like this:
https://en.wikipedia.org/w/api.php?action=query&generator=allrevisions&garvuser=Kaldari&garvlimit=500
However, if you are querying for a user with a huge number of pages they have edited like Kaldari you will have to paginate through over 100 pages of page ids to get all of the pages Kaldari has edited.
This isn't a huge problem, except the requests have to be made serially (i.e. one after the next after the next). This can take roughly 20-30 seconds to complete in the user's browser (where the requests are being made).
I understand that it is bad etiquette to make the requests in parallel, however, the cost in usability and performance is really high.
Solution
A potential solution could be to give clients the ability to pass a param to the API that will return all of the continue ids (and might not even return any results). Another solution could be to switch to incremental page numbers and return the total number of pages.
The API should cache the results of a query and allow the same query to be executed without being throttled. But when a query hits the origin server it should be throttled (by IP Address?). This will allow clients to execute the requests in parallel and allow the server to return the results as quickly as it wants to. I do not think it should be the responsibility of the client to throttle themselves (unless they want to).
Work Around
Make a tool on Toolforge that queries the database and returns the results in JSON format. In other words: Make Your Own API™