Dealing with Collections
When a route returns an array, most of time it means that the resource is paginated. You can double check it by verifying Response headers. Pagination headers looks like this:
"x-pagination-limit": "10",
"x-pagination-limit-max": "50",
"x-pagination-offset": "0",
"x-pagination-size": "104",
The first important point about Collections with Tuleap REST API is that x-pagination-size
might not represent the amount
of data that you will be able to actually fetch.
For most routes, it’s too resource intensive to compute the permissions for each and every element of the collection being returned “just” to be about to count them.
So for most routes, x-pagination-size
gives the maximum number of matching elements.
The second important point is that pages (slices) you will be getting might be empty if you don’t have the permission to read the elements.
Let say you have x-pagination-size
equals to 200 and x-pagination-limit-max
equals to 50. You first loop might be
able to return 50 elements (because you can read all of them), the second only 10, the third 0 (empty set), the fourth 50
again. At the end of the loop you have 110 elements retrieved.
To summarize, in order to properly use Collections you must:
get the page size from
x-pagination-limit-max
(so if we change it you will benefit of the change automatically)you need to iterate from 0 to
x-pagination-size
whatever happen, do not - stop on empty collections (you will be missing data) - stop when you retrievedx-pagination-size
elements (you will have an infinite loop)