2009-02-23 10 views
11

Mam aplikację WWW RESTful obsługującą wiele pól sortowania w kolekcji elementów. Czy istnieje wspólna konwencja kodowania tych pól sortowania w ciągu zapytania adresu URL? Rozważam wzór podobny do następującego:Konwencja ciągu zapytań adresu URL dla wielu sortowania

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

To posortuje kolekcję książek według autora, a następnie według daty publikacji.

Zasadniczo potrzebuję wygodnego sposobu na pary wartości nazwa-wartość w ciągu zapytania, aby mieć pary wartości nazwa-własna. Będę musiał zrobić coś podobnego do powyższego przykładu dla parametrów filtra.

Czy Rails lub ASP.NET MVC mają wzór? Czy istnieją inne ramy, które ustanowiły sposoby radzenia sobie z tym problemem? Wolałbym używać znanego formatu niż używać własnych.

Wolałbym również format, który używa jak najmniejszego procentowego kodowania adresu URL.

+0

Dobre pytanie - sam zastanawiałem się nad tym samym. –

+0

Wygląda na to, że tworzysz format JSON-owski; których chciałbym uniknąć, ponieważ ktoś może to zinterpretować - tak - JSON, w którym to przypadku pojęcie porządku jest tracone. –

+0

Dobra uwaga, Tom. Dlatego proszę o opinie! – dthrasher

Odpowiedz

9

Zrobiłem to przed użyciem standardowej składni SQL. Istnieje wiele funkcji i technik analizowania.

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

które mogłyby być kodowane do

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

Jest to dobry sposób na to, aby był kompatybilny z Solr, szeroko używaną wyszukiwarką open-source. – KenE

+0

+1, Plus Lista przecinek jest prawdopodobnie lepsza niż lista przecinek. –

+0

Proste. Lubię to. Mamy zwycięzcę! – dthrasher

0

Unikałbym używania parametrów podobnych do GET. Co na ten temat:

http://myapp.com/books/sortedby/author:asc+datepublished:desc/count/12 

Chodzi o to, że jeśli trzeba uściślić wyszukiwanie dla zasobu w oparciu o kryterium, należy dodać jego nazwę na URL, a następnie wartość parametru. Jeśli potrzebujesz więcej niż jednej wartości parametru, rozdziel je za pomocą znaku +.

To co StackOverflow używa do zaznaczonych pytań:

http://stackoverflow.com/questions/tagged/java+servlet 

Przyznaję jednak, że dodanie licznika/12 na końcu wygląda nieco dziwnie, ale nie mogę wymyślić nic lepszego.

+2

Jaki jest powód, dla którego należy stosować parametry kwerendy? Umieszczenie licznika, filtrowanie, sortowanie itd. W samym adresie URL dałoby mi ogromną liczbę adresów URL, którymi musiałbym się zająć, a to zmusiłoby ludzi do zapamiętania, czy sortowane jest przed liczeniem czy odwrotnie. – dthrasher

0

co w pełni zgodnej wersji PHP jak ten:

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

nieco dłużej, ale bardzo wygodny i jak mówiłem, zgodny z PHP. ASP.NET mógł również zaimplementować obsługę tego formatu.

To stworzy tablicę, rodzaju, gdzie każdy element bezpośrednio od rodzaju ma nazwę i dir nieruchomości.

6

na odpoczynek, wolę bardziej intuicyjną składnię:

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

i bardziej opracowany (bez znaku '+'):

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

łatwy do zapamiętania ...

+0

co oznacza znak + i -? mam na myśli to, co jest asc i co i desc. –

Powiązane problemy