)]}'
{"guidelines/pagination_filter_sort.rst":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"448a931fbb5f716b739227c0faa92f5b5bb4862f","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"  GET /app/items?offset\u003d10\u0026limit\u003d10"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"In this example, items 10 through 20 would be returned."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Filtering"},{"line_number":20,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"ba5da102_6413685d","line":17,"updated":"2016-10-26 20:50:55.000000000","message":"Please clarify what \"offset\" here is. The previous proposal IIRC had \"marker\", and that\u0027s whay a lot of projects use already.","commit_id":"f18941e181e01efc30aede251dbe41399f92e749"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"d4e224c8c258fbced4f55fa5936aab6e1e129863","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"  GET /app/items?offset\u003d10\u0026limit\u003d10"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"In this example, items 10 through 20 would be returned."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Filtering"},{"line_number":20,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"ba5da102_44cf44b0","line":17,"in_reply_to":"ba5da102_6413685d","updated":"2016-10-26 21:07:49.000000000","message":"Done. And I\u0027m okay with marker, however offset is pretty common with databases, which is why I chose it.","commit_id":"f18941e181e01efc30aede251dbe41399f92e749"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"47e42c55fcd62f3549cd6973d88d9ba47b878687","unresolved":false,"context_lines":[{"line_number":9,"context_line":"----------"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Pagination can be implemented using ``limit`` and ``offset``. ``limit`` defines"},{"line_number":12,"context_line":"the number of items to be returned; ``offset`` is the first item to return."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"For example::"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba5da102_611b1a1c","line":12,"updated":"2016-10-30 16:15:02.000000000","message":"I\u0027ve not checked all projects, but at least nova and ironic seem to use \"marker\" for this case (first item). Offset is used in Nova (apparently), but it means \"count from the beginning\".","commit_id":"c6b22f33ff17b8573b444b5e5dc17bee2260ee15"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a5d14ae8640c3ebe150c4ec1d5ca4b718c42193b","unresolved":false,"context_lines":[{"line_number":9,"context_line":"----------"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Pagination can be implemented using ``limit`` and ``offset``. ``limit`` defines"},{"line_number":12,"context_line":"the number of items to be returned; ``offset`` is the first item to return."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"For example::"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"9a629dbe_ad5a8c4e","line":12,"in_reply_to":"9a629dbe_cdaee084","updated":"2016-11-08 17:00:43.000000000","message":"offset is only useful for collections twhere items are never removed and only appended. please define marker instead, that\u0027s what real projects use.","commit_id":"c6b22f33ff17b8573b444b5e5dc17bee2260ee15"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"235ee7a20e374b0a7e34f4154ffc75995f5443c0","unresolved":false,"context_lines":[{"line_number":9,"context_line":"----------"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Pagination can be implemented using ``limit`` and ``offset``. ``limit`` defines"},{"line_number":12,"context_line":"the number of items to be returned; ``offset`` is the first item to return."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"For example::"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"9a629dbe_cdaee084","line":12,"in_reply_to":"ba5da102_611b1a1c","updated":"2016-11-08 16:56:54.000000000","message":"Yeah, I view offset as the count index; not the item id.","commit_id":"c6b22f33ff17b8573b444b5e5dc17bee2260ee15"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"47e42c55fcd62f3549cd6973d88d9ba47b878687","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"For example::"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"  GET /app/items?offset\u003d10\u0026limit\u003d10"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"In this example, items 10 through 20 would be returned."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba5da102_81166eef","line":16,"updated":"2016-10-30 16:15:02.000000000","message":"Can we please use UUID instead of 10 in the example? Then the problem I mention will be more prominent:\n\n GET /app/items?offset\u003df9b730be-b7b1-4235-be38-8d08db9acfda\u0026limit\u003d10\n\nvs\n\n GET /app/items?marker\u003df9b730be-b7b1-4235-be38-8d08db9acfda\u0026limit\u003d10","commit_id":"c6b22f33ff17b8573b444b5e5dc17bee2260ee15"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"235ee7a20e374b0a7e34f4154ffc75995f5443c0","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"For example::"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"  GET /app/items?offset\u003d10\u0026limit\u003d10"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"In this example, items 10 through 20 would be returned."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"9a629dbe_0da298ae","line":16,"in_reply_to":"ba5da102_81166eef","updated":"2016-11-08 16:56:54.000000000","message":"offset is the count index; I\u0027ll make this more apparent in the next patch. I don\u0027t see a need for marker (the item id to start with).","commit_id":"c6b22f33ff17b8573b444b5e5dc17bee2260ee15"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"3db82dac0b5eabc7aa220be0632aee1faeb342e2","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    \"links\": ["},{"line_number":83,"context_line":"        {"},{"line_number":84,"context_line":"            \"rel\": \"self\","},{"line_number":85,"context_line":"            \"href\": \"http://developer.openstack.org/app/items?limit\u003d30\u0026marker\u003d752b0b9997f24be49e5a1d89d1c53279\","},{"line_number":86,"context_line":"        },"},{"line_number":87,"context_line":"        {"},{"line_number":88,"context_line":"            \"rel\": \"first\","}],"source_content_type":"text/x-rst","patch_set":3,"id":"ba5201f7_9d56c7d0","line":85,"updated":"2017-01-03 14:24:16.000000000","message":"I don\u0027t have a strongly held opinion on that, honestly.\n\nOn the one hand, the clients that OpenStack creates for its services don\u0027t need the scheme or host. On the other, those are far from the only clients that people use and I think including the full URL makes it easier for someone to follow their nose. Not everyone is going to write a client that allows you to make a request like\n\n    request(\"GET\", \"/app/items\", query_parameters\u003dHash(limit\u003d\"30\", marker\u003d\"752...\"))\n\nSo I have the (loosely held) opinion that the full URL can and should be returned. Especially since more services are learning to respect load-balancer headers, e.g., X-Forwarded-For and X-Forwarded-Proto. (I would have used https in these examples but the other usage of developer.o.o used HTTP so I opted for consistency over personal preference. ;))","commit_id":"e43e73fb164502e5bec894fee45ecbbfdcb46c1e"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"6eb69cb5ae3ad9d9e54dd4e2b642ca1cec5112c2","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    \"links\": ["},{"line_number":83,"context_line":"        {"},{"line_number":84,"context_line":"            \"rel\": \"self\","},{"line_number":85,"context_line":"            \"href\": \"http://developer.openstack.org/app/items?limit\u003d30\u0026marker\u003d752b0b9997f24be49e5a1d89d1c53279\","},{"line_number":86,"context_line":"        },"},{"line_number":87,"context_line":"        {"},{"line_number":88,"context_line":"            \"rel\": \"first\","}],"source_content_type":"text/x-rst","patch_set":3,"id":"da4df55a_06b0ba42","line":85,"updated":"2016-12-23 13:05:00.000000000","message":"Out of curiosity, what\u0027s your opinion on the scheme and host being optional in these urls?","commit_id":"e43e73fb164502e5bec894fee45ecbbfdcb46c1e"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"3db82dac0b5eabc7aa220be0632aee1faeb342e2","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    ]"},{"line_number":104,"context_line":"  }"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"Alternatively, if services are not including JSON Hyper-Schema links in their"},{"line_number":107,"context_line":"responses they can consider using the ``Link`` header as defined in"},{"line_number":108,"context_line":":rfc:`5988` and :rfc:`6903`."},{"line_number":109,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"ba5201f7_bd51cbda","line":106,"updated":"2017-01-03 14:24:16.000000000","message":"Done.","commit_id":"e43e73fb164502e5bec894fee45ecbbfdcb46c1e"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"6eb69cb5ae3ad9d9e54dd4e2b642ca1cec5112c2","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    ]"},{"line_number":104,"context_line":"  }"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"Alternatively, if services are not including JSON Hyper-Schema links in their"},{"line_number":107,"context_line":"responses they can consider using the ``Link`` header as defined in"},{"line_number":108,"context_line":":rfc:`5988` and :rfc:`6903`."},{"line_number":109,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"da4df55a_a6852e5a","line":106,"updated":"2016-12-23 13:05:00.000000000","message":"link hyper schema to http://json-schema.org/latest/json-schema-hypermedia.html ?\n\nMay as well, for the sake of education etc.","commit_id":"e43e73fb164502e5bec894fee45ecbbfdcb46c1e"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"24047ae5a6950c2fc2d4303d1ee95afd8f9d7d41","unresolved":false,"context_lines":[{"line_number":54,"context_line":"- prev"},{"line_number":55,"context_line":"- self"},{"line_number":56,"context_line":"- next"},{"line_number":57,"context_line":"- last"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"For example, a response to::"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"ba5201f7_77eb9478","line":57,"updated":"2017-01-05 20:18:06.000000000","message":"Done.","commit_id":"31674c831d5abc02b47dd2e87edba50ac0921ef4"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7f7d9ce2df0047ad5ece15dda14127bdf21287f6","unresolved":false,"context_lines":[{"line_number":54,"context_line":"- prev"},{"line_number":55,"context_line":"- self"},{"line_number":56,"context_line":"- next"},{"line_number":57,"context_line":"- last"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"For example, a response to::"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"ba5201f7_bd97c846","line":57,"range":{"start_line":57,"start_character":0,"end_line":57,"end_character":6},"updated":"2017-01-04 22:51:30.000000000","message":"This can be very expensive to calculate, so some wording to that effect should be added that indicates that the \u0027last\u0027 link is completely optional, and possibly undesirable.","commit_id":"31674c831d5abc02b47dd2e87edba50ac0921ef4"},{"author":{"_account_id":11067,"name":"Jim Baker","email":"jim.baker@python.org","username":"jimbaker"},"change_message_id":"7d0d15103c0b3716d17a7c1daeb99da8c926724e","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"- ``limit`` to define the number of items returned in the response, and"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"- ``marker`` to specify the ID of the last seen item"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"For example::"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba5201f7_c8dab316","line":15,"updated":"2017-01-07 02:48:42.000000000","message":"It\u0027s worthwhile mentioning that oslo db provides direct support for this strategy in http://docs.openstack.org/developer/oslo.db/api/oslo_db.sqlalchemy.utils.html#oslo_db.sqlalchemy.utils.paginate_query\nSuch a link can help avoid unnecessary reimplementation of this approach and/or discovery of this API.","commit_id":"bdad133b2df0c41fe59c6724e4e76ad094089e65"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"084391eab8215a5820326b1e3ffccaa8ae887cb4","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"- ``limit`` to define the number of items returned in the response, and"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"- ``marker`` to specify the ID of the last seen item"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"For example::"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"9a57fde8_8cf176d0","line":15,"in_reply_to":"ba5201f7_c8dab316","updated":"2017-01-12 12:23:07.000000000","message":"good idea","commit_id":"bdad133b2df0c41fe59c6724e4e76ad094089e65"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"f1c537b065ae1cce78505208bd6fda455b2a6870","unresolved":false,"context_lines":[{"line_number":113,"context_line":"not ``prev``. Likewise if it is the last page, then including ``next`` is"},{"line_number":114,"context_line":"optional but the rest (``first``, ``prev``, ``self``, ``last``) is sensible."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"It is also important to note that naive implementations of pagination links"},{"line_number":117,"context_line":"will find that ``last`` is very costly to calculate. If a naive solution is"},{"line_number":118,"context_line":"all that can be mustered, then it is up to a team to decide if they want to"},{"line_number":119,"context_line":"impose the costly calculation for every one of those responses."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"Filtering"},{"line_number":122,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba5201f7_a91e6a6d","line":119,"range":{"start_line":116,"start_character":0,"end_line":119,"end_character":63},"updated":"2017-01-06 14:16:48.000000000","message":"I really dislike the condescending tone of this paragraph. It should be sufficient to note that the \u0027last\u0027 link might be costly to calculate, and should be considered optional. There is no need to be insulting.","commit_id":"bdad133b2df0c41fe59c6724e4e76ad094089e65"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"084391eab8215a5820326b1e3ffccaa8ae887cb4","unresolved":false,"context_lines":[{"line_number":116,"context_line":"It is also important to note that naive implementations of pagination links"},{"line_number":117,"context_line":"will find that ``last`` is very costly to calculate. If a naive solution is"},{"line_number":118,"context_line":"all that can be mustered, then it is up to a team to decide if they want to"},{"line_number":119,"context_line":"impose the costly calculation for every one of those responses."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"Filtering"},{"line_number":122,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9a57fde8_8c2096f9","line":119,"updated":"2017-01-12 12:23:07.000000000","message":"It\u0027s a fine line to balance between being condescending and encouraging. I think we definitely should encourage people to be introspective about their existing implementations by pointing out that there are different worlds where some things that are considered hard _here_ but considered easy _there_.\n\nWhich is to say I think we should have something like this paragraph but perhaps a bit less snarky.","commit_id":"bdad133b2df0c41fe59c6724e4e76ad094089e65"},{"author":{"_account_id":11067,"name":"Jim Baker","email":"jim.baker@python.org","username":"jimbaker"},"change_message_id":"7d0d15103c0b3716d17a7c1daeb99da8c926724e","unresolved":false,"context_lines":[{"line_number":113,"context_line":"not ``prev``. Likewise if it is the last page, then including ``next`` is"},{"line_number":114,"context_line":"optional but the rest (``first``, ``prev``, ``self``, ``last``) is sensible."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"It is also important to note that naive implementations of pagination links"},{"line_number":117,"context_line":"will find that ``last`` is very costly to calculate. If a naive solution is"},{"line_number":118,"context_line":"all that can be mustered, then it is up to a team to decide if they want to"},{"line_number":119,"context_line":"impose the costly calculation for every one of those responses."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"Filtering"},{"line_number":122,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba5201f7_08e03bcc","line":119,"range":{"start_line":116,"start_character":0,"end_line":119,"end_character":63},"in_reply_to":"ba5201f7_a91e6a6d","updated":"2017-01-07 02:48:42.000000000","message":"Agreed with Ed, it\u0027s unnecessary. Better to advise on such costs, if we can quantify; or leave unsaid. We should trust that developers can make good decisions when we have given guidance about potential risks.","commit_id":"bdad133b2df0c41fe59c6724e4e76ad094089e65"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"d0eb77137a23db45aac61d486830060b8c1e2a19","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"- ``limit`` to define the number of items returned in the response, and"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"- ``marker`` to specify the ID of the last seen item"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"For example::"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"5a3905b3_4207361c","line":15,"range":{"start_line":15,"start_character":24,"end_line":15,"end_character":52},"updated":"2017-01-19 18:55:25.000000000","message":"Does this item still need to exist? What happens when it is deleted between listing requests?\n\nWould it be better to define marker in terms of the sort key(s), so that even if that particular item no longer exists, we can still make sense of where it would have existed in the listing?","commit_id":"d9715e89fde26a7e558033ea14fa09fdb2621711"},{"author":{"_account_id":10670,"name":"Michael McCune","email":"elmiko@redhat.com","username":"mimccune"},"change_message_id":"be2b4621753be4aaf1dc498bf19d118ffb6ed83d","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"- ``limit`` to define the number of items returned in the response, and"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"- ``marker`` to specify the ID of the last seen item"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"For example::"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"9a30ddce_32ca1f4f","line":15,"range":{"start_line":15,"start_character":24,"end_line":15,"end_character":52},"in_reply_to":"5a3905b3_4207361c","updated":"2017-03-09 20:43:33.000000000","message":"\u003e What happens when it is deleted between listing requests?\n\ni think this is an important question, but i\u0027m not sure how we proceed with guidance here. i would imagine that if a resource is deleted and then used in a request that an error of some type would be returned and the pagination request would need to begin again, perhaps.","commit_id":"d9715e89fde26a7e558033ea14fa09fdb2621711"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"d0eb77137a23db45aac61d486830060b8c1e2a19","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    ]"},{"line_number":39,"context_line":"  }"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"If, we then wanted to request the next 30 items after the last one, we would"},{"line_number":42,"context_line":"do::"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"  GET /app/items?limit\u003d30\u0026marker\u003d08ec231f6d9a43dda97d4b950c3393df"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5a3905b3_dfece1c9","line":41,"range":{"start_line":41,"start_character":30,"end_line":41,"end_character":66},"updated":"2017-01-19 18:55:25.000000000","message":"This implies some sort of ordering (if only an arbitrary ordering imposed by the backing database). Should there be some discussion of the default ordering, and what \"next\" and \"last\" mean in this context?","commit_id":"d9715e89fde26a7e558033ea14fa09fdb2621711"},{"author":{"_account_id":10670,"name":"Michael McCune","email":"elmiko@redhat.com","username":"mimccune"},"change_message_id":"be2b4621753be4aaf1dc498bf19d118ffb6ed83d","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    ]"},{"line_number":39,"context_line":"  }"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"If, we then wanted to request the next 30 items after the last one, we would"},{"line_number":42,"context_line":"do::"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"  GET /app/items?limit\u003d30\u0026marker\u003d08ec231f6d9a43dda97d4b950c3393df"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9a30ddce_12427bae","line":41,"range":{"start_line":41,"start_character":30,"end_line":41,"end_character":66},"in_reply_to":"5a3905b3_dfece1c9","updated":"2017-03-09 20:43:33.000000000","message":"i don\u0027t think this guideline needs to define a default ordering, that should be left up to the individual projects as it may have specific meaning there.\n\nfor the purposes of this guideline, i take \"next\" and \"last\" to just be contextual within the framework of however the server prefers to return its resources. should we perhaps clarify that more specifically?","commit_id":"d9715e89fde26a7e558033ea14fa09fdb2621711"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"d0eb77137a23db45aac61d486830060b8c1e2a19","unresolved":false,"context_lines":[{"line_number":54,"context_line":"- prev"},{"line_number":55,"context_line":"- self"},{"line_number":56,"context_line":"- next"},{"line_number":57,"context_line":"- last"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"For example, a response to::"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"5a3905b3_22aeaa2e","line":57,"updated":"2017-01-19 18:55:25.000000000","message":"It may be worth noting that prev and last can make no guarantees about their future accuracy:\n\n* If items are deleted, the prev link may well include items from the current result.\n* If items are added, there may be more items between the current result and what\u0027s returned by the prev link, or more items beyond what\u0027s returned by the last link.","commit_id":"d9715e89fde26a7e558033ea14fa09fdb2621711"},{"author":{"_account_id":10670,"name":"Michael McCune","email":"elmiko@redhat.com","username":"mimccune"},"change_message_id":"be2b4621753be4aaf1dc498bf19d118ffb6ed83d","unresolved":false,"context_lines":[{"line_number":54,"context_line":"- prev"},{"line_number":55,"context_line":"- self"},{"line_number":56,"context_line":"- next"},{"line_number":57,"context_line":"- last"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"For example, a response to::"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"9a30ddce_b219afd9","line":57,"in_reply_to":"5a3905b3_22aeaa2e","updated":"2017-03-09 20:43:33.000000000","message":"excellent points","commit_id":"d9715e89fde26a7e558033ea14fa09fdb2621711"},{"author":{"_account_id":18653,"name":"Milan Kováčik","email":"mkovacik@redhat.com","username":"dparalen"},"change_message_id":"2af148782a139e803c37d6d1691de3cacbedaa39","unresolved":false,"context_lines":[{"line_number":54,"context_line":"- prev"},{"line_number":55,"context_line":"- self"},{"line_number":56,"context_line":"- next"},{"line_number":57,"context_line":"- last"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"For example, a response to::"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a1ced50_95a70cbc","line":57,"in_reply_to":"9a30ddce_b219afd9","updated":"2017-03-22 14:09:33.000000000","message":"Unfortunately, the raciness is inherent w/ multiple requests. See also how to create OR-ed filter criteria below, line #128. I\u0027m not sure what can be done to make this better (suck less).","commit_id":"d9715e89fde26a7e558033ea14fa09fdb2621711"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"d0eb77137a23db45aac61d486830060b8c1e2a19","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        },"},{"line_number":95,"context_line":"        {"},{"line_number":96,"context_line":"            \"rel\": \"next\","},{"line_number":97,"context_line":"            \"href\": \"http://developer.openstack.org/app/items?limit\u003d30\u0026marker\u003deff79f5b4f8743caa1f775846302c1d5\","},{"line_number":98,"context_line":"        },"},{"line_number":99,"context_line":"        {"},{"line_number":100,"context_line":"            \"rel\": \"last\","}],"source_content_type":"text/x-rst","patch_set":6,"id":"5a3905b3_3f87a662","line":97,"range":{"start_line":97,"start_character":78,"end_line":97,"end_character":110},"updated":"2017-01-19 18:55:25.000000000","message":"08ec231f6d9a43dda97d4b950c3393df, no? The advice from L41-44 would seem to indicate that.","commit_id":"d9715e89fde26a7e558033ea14fa09fdb2621711"},{"author":{"_account_id":10670,"name":"Michael McCune","email":"elmiko@redhat.com","username":"mimccune"},"change_message_id":"be2b4621753be4aaf1dc498bf19d118ffb6ed83d","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        },"},{"line_number":95,"context_line":"        {"},{"line_number":96,"context_line":"            \"rel\": \"next\","},{"line_number":97,"context_line":"            \"href\": \"http://developer.openstack.org/app/items?limit\u003d30\u0026marker\u003deff79f5b4f8743caa1f775846302c1d5\","},{"line_number":98,"context_line":"        },"},{"line_number":99,"context_line":"        {"},{"line_number":100,"context_line":"            \"rel\": \"last\","}],"source_content_type":"text/x-rst","patch_set":6,"id":"9a30ddce_32269f15","line":97,"range":{"start_line":97,"start_character":78,"end_line":97,"end_character":110},"in_reply_to":"5a3905b3_3f87a662","updated":"2017-03-09 20:43:33.000000000","message":"+1","commit_id":"d9715e89fde26a7e558033ea14fa09fdb2621711"},{"author":{"_account_id":11067,"name":"Jim Baker","email":"jim.baker@python.org","username":"jimbaker"},"change_message_id":"6b1ece6604c009bf4c29f13d362f5038bbe8f708","unresolved":false,"context_lines":[{"line_number":114,"context_line":"optional but the rest (``first``, ``prev``, ``self``, ``last``) is sensible."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"It should also be emphasized that calculating the ``last`` link can be costly,"},{"line_number":117,"context_line":"as in many cases it would require querying the entire dataset, so implementing"},{"line_number":118,"context_line":"that link is entirely optional."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"Filtering"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7a3c09a3_1d5dfc46","line":117,"updated":"2017-01-17 23:04:23.000000000","message":"Maybe reword as follows to avoid some potential ambiguity:\n\n... can be costly. In many cases, such link calculation would require querying the entire dataset. Therefore implementing the ``last`` link is optional.","commit_id":"d9715e89fde26a7e558033ea14fa09fdb2621711"},{"author":{"_account_id":10670,"name":"Michael McCune","email":"elmiko@redhat.com","username":"mimccune"},"change_message_id":"be2b4621753be4aaf1dc498bf19d118ffb6ed83d","unresolved":false,"context_lines":[{"line_number":114,"context_line":"optional but the rest (``first``, ``prev``, ``self``, ``last``) is sensible."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"It should also be emphasized that calculating the ``last`` link can be costly,"},{"line_number":117,"context_line":"as in many cases it would require querying the entire dataset, so implementing"},{"line_number":118,"context_line":"that link is entirely optional."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"Filtering"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9a30ddce_326dbf31","line":117,"in_reply_to":"7a3c09a3_1d5dfc46","updated":"2017-03-09 20:43:33.000000000","message":"+1","commit_id":"d9715e89fde26a7e558033ea14fa09fdb2621711"}]}
