28

I have a RESTful web application that supports multiple sort fields on a collection of items. Is there a common convention for encoding these sort fields into the query string of a URL? I'm considering a pattern like the following:

http://myapp.com/books?sort=author:asc,datepublished:desc&count=12 

This would sort the collection of books by author and then by date published.

Basically, I need a convenient way for the name-value pairs in my query string to have name-value pairs of their own. I'll need to do something similar to the above example for filter parameters, too.

Does Rails or ASP.NET MVC have a pattern for this? Are there other frameworks that have established ways for dealing with this issue? I'd rather use a familiar format than roll my own.

I'd also prefer a format that uses as little URL percent-encoding as possible.

dthrasher
  • 40,656
  • 34
  • 113
  • 139

3 Answers3

32

I've done this before using the standard SQL sorting syntax. There are numerous parsing functions and techniques out there.

http://myapp.com/books?sort=author asc,datepublished desc&count=12

which would be encoded to

http://myapp.com/books?sort=author+asc,datepublished+desc&count=12
bendewey
  • 39,709
  • 13
  • 100
  • 125
20

For REST, I prefer a more intuitive syntax:

http://myapp.com/books?sort=author,-datepublished&count=12

Easy to remember... (means: ORDER BY author ASC, datepublished DESC)

note: removed "+" prefix because is a reserved word

joseaio
  • 767
  • 7
  • 5
0

What about a fully PHP compliant version like this one:

http://myapp.com/books?sort[0][name]=author&sort[0][dir]=asc&sort[1][name]=datepublished&sort[1][dir]=desc&count=12

A bit longer but much convinient and as I've said, compliant with PHP. ASP.NET might have implemented support for this format also.

This will create an array, sort, directly where each element of sort has a name and dir property.

BYK
  • 1,359
  • 3
  • 15
  • 37