Соглашение о строке URL-запроса для множественной сортировки

У меня есть веб-приложение RESTful, которое поддерживает несколько полей сортировки в коллекции элементов. Есть ли общее соглашение для кодирования этих полей сортировки в строку запроса URL-адреса? Я рассматриваю такую ​​схему:

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

Это позволит отсортировать коллекцию книг по автору, а затем по дате публикации.

По сути, мне нужен удобный способ, чтобы пары имя-значение в моей строке запроса имели собственные пары имя-значение. Мне также нужно сделать что-то похожее на приведенный выше пример для параметров фильтра.

Есть ли в Rails или ASP.NET MVC образец для этого? Существуют ли другие структуры, которые установили способы решения этой проблемы? Я предпочитаю использовать знакомый формат, чем раскатывать свой собственный.

Я также предпочел бы формат, который использует как можно меньше процентного кодирования URL.

Ответов (3)

Решение

Я сделал это перед использованием стандартного синтаксиса сортировки SQL. Существует множество функций и техник синтаксического анализа.

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

который будет закодирован в

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

Для REST я предпочитаю более интуитивно понятный синтаксис:

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

И более подробно (без знака "+"):

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

Легко запомнить...

А как насчет полностью совместимой с PHP версии, подобной этой:

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

Немного длиннее, но намного удобнее и, как я уже сказал, совместим с PHP. В ASP.NET также могла быть реализована поддержка этого формата.

Это создаст массив sort , в котором каждый элемент sort имеет имя и свойство dir .