Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 239807
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 11, 20262026-05-11T20:36:54+00:00 2026-05-11T20:36:54+00:00

I’m interested in exposing a direct REST interface to collections of JSON documents (think

  • 0

I’m interested in exposing a direct REST interface to collections of JSON documents (think CouchDB or Persevere). The problem I’m running into is how to handle the GET operation on the collection root if the collection is large.

As an example pretend I’m exposing StackOverflow’s Questions table where each row is exposed as a document (not that there necessarily is such a table, just a concrete example of a sizable collection of ‘documents’). The collection would be made available at /db/questions with the usual CRUD api GET /db/questions/XXX, PUT /db/questions/XXX, POST /db/questions is in play. The standard way to get the entire collection is to GET /db/questions but if that naively dumps each row as a JSON object, you’ll get a rather sizeable download and a lot of work on the part of the server.

The solution is, of course, paging. Dojo has solved this problem in its JsonRestStore via a clever RFC2616-compliant extension of using the Range header with a custom range unit items. The result is a 206 Partial Content that returns only the requested range. The advantage of this approach over a query parameter is that it leaves the query string for…queries (e.g. GET /db/questions/?score>200 or somesuch, and yes that’d be encoded %3E).

This approach completely covers the behavior I want. The problem is that RFC 2616 specifies that on a 206 response (emphasis mine):

The request MUST have included a Range header field (section 14.35)
indicating the desired range, and MAY have included an If-Range
header field (section 14.27) to make the request conditional.

This makes sense in the context of the standard usage of the header but is a problem because I’d like the 206 response to be the default to handle naive clients/random people exploring.

I’ve gone over the RFC in detail looking for a solution but have been unhappy with my solutions and am interested in SO’s take on the problem.

Ideas I’ve had:

  • Return 200 with a Content-Range header! – I don’t think that this is wrong, but I’d prefer if a more obvious indicator that the response is only Partial Content.
  • Return 400 Range Required – There is not a special 400 response code for required headers, so the default error has to be used and read by hand. This also makes exploration via web browser (or some other client like Resty) more difficult.
  • Use a query parameter – The standard approach, but I’m hoping to allow queries a la Persevere and this cuts into the query namespace.
  • Just return 206! – I think most clients wouldn’t freak out, but I’d rather not go against a MUST in the RFC
  • Extend the spec! Return 266 Partial Content – Behaves exactly like 206 but is in response to a request that MUST NOT contain the Range header. I figure that 266 is high enough that I shouldn’t run into collision issues and it makes sense to me but I’m not clear on whether this is considered taboo or not.

I’d think this is a fairly common problem and I’d like to see this done in a sort of de facto fashion so I or someone else isn’t reinventing the wheel.

What’s the best way to expose a full collection via HTTP when the collection is large?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-11T20:36:54+00:00Added an answer on May 11, 2026 at 8:36 pm

    My gut feeling is that the HTTP range extensions aren’t designed for your use case, and thus you shouldn’t try. A partial response implies 206, and 206 must only be sent if the client asked for it.

    You may want to consider a different approach, such as the one use in Atom (where the representation by design may be partial, and is returned with a status 200, and potentially paging links). See RFC 4287 and RFC 5005.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I'm parsing an RSS feed that has an ’ in it. SimpleXML turns this
I am trying to loop through a bunch of documents I have to put
I have a bunch of posts stored in text files formatted in yaml/textile (from
We're building an app, our first using Rails 3, and we're having to build
I have this code: - (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock { NSString *someString = [[NSString
I'm making a simple page using Google Maps API 3. My first. One marker
I have some data like this: 1 2 3 4 5 9 2 6

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.