Pagination in a REST web application
I think the problem with version 3 is more a "point of view" problem - do you see the page as the resource or the products on the page.
If you see the page as the resource it is a perfectly fine solution, since the query for page 2 will always yield page 2.
But if you see the products on the page as the resource you have the problem that the products on page 2 might change (old products deleted, or whatever), in this case the URI is not always returning the same resource(s).
E.g. A customer stores a link to the product list page X, next time the link is opened the product in question might no longer be on page X.
I agree with Fionn, but I'll go one step further and say that to me the Page is not a resource, it's a property of the request. That makes me chose option 1 query string only. It just feels right. I really like how the Twitter API is structured restfully. Not too simple, not too complicated, well documented. For better or worse it's my "go to" design when I am on the fence on doing something one way versus another.