Hi,
first of all : GREAT WORK!

What I need is JSONRest support following RFC 2616.
( http://www.ietf.org/rfc/rfc2616.txt )

I would like to use vibe.d as REST Server back-end in conjunction with
dojo/dijit (front-end) to implement RIAs.

This means that certain things should work as follows.

----Method mapping : (pretty much the same I've asked for on D.announce)
get(id) :

  • This will trigger a GET request to {target}{id}.

query(query, options)

  • This will trigger a GET request to {target}{query}. If query is an
    object, it will be serialized using dojo.objectToQuery. If query is a
    string, it is appended to the URL as-is. If options includes a sort
    property, it will be serialized as a query parameter as well; see
    Sorting for more information.

remove(id) :

  • This will trigger a DELETE request to {target}{id}.

put(object, options) :

  • If object includes an identity property, or options includes an id,
    this will trigger a PUT request to {target}{id} with the request body
    being the provided object serialized as JSON. If no identity is
    provided, then a POST request is made to the store’s target URL (no id
    appended) with the object as the body. If the options.incremental
    property is true, then a POST request is made to {target}{id} with the
    object as the body. You may also include an options.overwrite property.
    If overwrite is set to true, then an If-Match: header is included. If
    overwrite is set to false, then an If-None-Match:
    header is included

add(object, options) :

  • This behaves exactly like put(object, options), except that
    options.overwrite is set to false, indicating that a new object must be
    created.

------Paging : (Requires Range header support, and is required to handle
huge collections/database-tables)

JsonRest store uses HTTP’s Range header to perform paging. When a
request is made for a range of items, JsonRest will include a Range
header with an items range unit specifying the range:

 Range: items=0-24

On your server, you should look at the Range header in the request to
know which items to return. The server should respond with a
Content-Range header to indicate how many items are being returned and
how many total items exist:

 Content-Range: items 0-24/66

-------Sorting :
When a query request is made that includes a sort option in the options
object, an additional sort field is added to the query string. If the
store’s sortParam property is set, it will use that value as the key for
the field in the query string.

For example, given the following store and request:

var store = new JsonRestStore({
target: "/FooObject/",
sortParam: "sortBy"
});

store.query({ foo: "value1" }, {
sort: [

 { attribute: "foo" },
 { attribute: "bar", descending: true }

]
});

The resulting request to the server would be:

 /FooObject/?foo=value1&sortBy=+foo,-bar

If sortParam is not set, the sort value is appended without a key-value
pair, surrounded by “sort()”:

 /FooObject/?foo=value1&sort(+foo,-bar)


.... Hope this makes sense to you.
Bjoern