2009-02-23 16 views
11

Öğeler koleksiyonunda birden çok sıralama alanını destekleyen RESTful bir web uygulamasına sahibim. Bu sıralama alanlarını bir URL'nin sorgu dizesine kodlamak için ortak bir kural var mı?Birden çok sıralama için URL sorgu dizesi sözleşmesi

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

Bu yazarın kitaplarının Koleksiyonu sıralamak ve daha sonra tarih tarafından yayınlanan olacaktır: Ben aşağıdaki gibi bir desen düşünüyorum.

Temel olarak, sorgu dizilimdeki ad-değer çiftlerinin kendi ad-değer çiftlerine sahip olmaları için uygun bir yola ihtiyacım var. Filtre parametresi için yukarıdaki örneğe benzer bir şey yapmam gerekecek.

Rails veya ASP.NET MVC'nin bunun için bir deseni var mı? Bu sorunla başa çıkmanın yollarını oluşturan başka çerçeveler var mı? Tanıdık bir formatı kendi başıma kullanmamayı tercih ederim.

Ayrıca, mümkün olduğunca az URL yüzde kodlaması kullanan bir biçimi tercih ederim.

+0

İyi soru - Aynı şeyi kendim de merak ettim. –

+0

JSON-ish formatı oluşturuyor gibi görünüyor; Birisi bunu-JSON olarak yorumlayabileceğinden kaçınacağım, bu durumda sipariş kavramı kaybolur. –

+0

İyi nokta Tom. Bu yüzden geri bildirim rica ediyorum! – dthrasher

cevap

9

Bunu standart SQL sıralama sözdizimini kullanmadan önce yaptım. Orada sayısız ayrıştırma fonksiyonları ve teknikleri vardır. Ne bu gibi tam bir PHP uyumlu sürümü hakkında

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

Bu, yaygın olarak kullanılan bir açık kaynak kodlu arama motoru olan Solr ile de uyumlu olduğu için gitmenin iyi bir yoludur. – KenE

+0

+1, Artı Virgül listesi muhtemelen Comma Comma listesinden daha iyidir. –

+0

Basit. Bunu sevdim. Bir kazananımız var! – dthrasher

0

GET benzeri parametreleri kullanmamaya özen gösteririm. Bunun neresi:

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

fikir bir kriter dayalı bir kaynak için arama rafine etmek gerekiyorsa, parametre değeri ve ardından, URL üzerinde bunun adını ekleyin olmasıdır. Birden fazla parametre değerine ihtiyacınız varsa, bunları bir + ile ayırın.

Bu StackOverflow Etiketlenmiş sorular için kullandığı şudur:

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

Sonunda sayımı/12 ekleyerek biraz tuhaf görünüyor ancak itiraf, ama daha iyi bir şey düşünemiyorum.

+2

Basamaklı querystring parametrelerinin nedeni nedir? Sayım, filtreleme, sıralama vb. URL'nin kendisinin ele geçirilmesiyle başa çıkmak için bana çok sayıda URL verilmiş olur ve bu, kullanıcıların sortby'nin saymadan önce mi yoksa tam tersi mi geldiğini hatırlamaya zorlar. – dthrasher

0

için kodlanmış olacağını

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

:

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

Daha uzun bit ama çok rahat ve ben söylediğim gibi, PHP ile uyumlu. ASP.NET de bu format için destek uygulamış olabilir.

Bu

tür her bir elemanı, bir adı ve dir özelliği, doğrudan bir dizi, tür yaratacaktır. ('+' Işareti olmadan)

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

Ve daha özenli:

6

DİNLENME için, ben daha sezgisel bir sözdizimi tercih

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

Kolay hatırlamak için ...

+0

+ ve - ne anlama geliyor? Yani asc nedir ve ne demek istediğimi. –