2009-02-23 28 views
11

Tôi có một ứng dụng web RESTful hỗ trợ nhiều trường sắp xếp trên một tập hợp các mục. Có một quy ước chung để mã hóa các trường sắp xếp này thành chuỗi truy vấn của URL không? Tôi đang xem xét một mẫu như sau:Quy ước chuỗi truy vấn URL cho nhiều loại

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

Điều này sẽ sắp xếp bộ sưu tập sách theo tác giả và sau đó được xuất bản theo ngày.

Về cơ bản, tôi cần một cách thuận tiện cho các cặp tên-giá trị trong chuỗi truy vấn của tôi để có cặp tên-giá trị của riêng chúng. Tôi sẽ cần phải làm một cái gì đó tương tự như ví dụ trên cho các thông số bộ lọc, quá.

Rails hoặc ASP.NET MVC có mẫu cho điều này không? Có các khung công tác khác đã thiết lập các cách để giải quyết vấn đề này không? Tôi muốn sử dụng một định dạng quen thuộc hơn so với cuộn của riêng tôi.

Tôi cũng thích định dạng sử dụng ít mã hóa phần trăm URL nhất có thể.

+0

Câu hỏi hay - tôi đã tự hỏi chính bản thân mình. –

+0

Dường như bạn đang tạo định dạng JSON-ish; mà tôi sẽ tránh vì ai đó có thể giải thích nó -as- JSON, trong trường hợp đó khái niệm đặt hàng bị mất. –

+0

Điểm tốt, Tom. Đó là lý do tại sao tôi yêu cầu phản hồi! – dthrasher

Trả lời

9

Tôi đã thực hiện việc này trước khi sử dụng cú pháp sắp xếp SQL tiêu chuẩn. Có rất nhiều chức năng phân tích cú pháp và kỹ thuật trên mạng.

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

đó sẽ được mã hóa để

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

Đây là một cách hay để sử dụng vì nó cũng tương thích với Solr, một công cụ tìm kiếm nguồn mở được sử dụng rộng rãi. – KenE

+0

+1, danh sách Dấu cộng cộng có lẽ tốt hơn danh sách Dấu phẩy. –

+0

Đơn giản. Tôi thích nó. Chúng ta có một người chiến thắng! – dthrasher

0

Tôi sẽ tránh sử dụng các tham số GET như. Điều gì về điều này:

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

Ý tưởng là nếu bạn cần tinh chỉnh tìm kiếm tài nguyên dựa trên tiêu chí, bạn thêm tên của nó vào URL, tiếp theo là giá trị tham số. Nếu bạn cần nhiều giá trị thông số, hãy tách chúng bằng dấu +.

Đây là những gì StackOverflow sử dụng cho các câu hỏi được gắn thẻ: Tuy nhiên

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

Tôi thừa nhận rằng việc thêm các tính/12 ở cuối có vẻ hơi lạ, nhưng tôi không thể nghĩ ra bất cứ điều gì tốt hơn.

+2

Lý do bỏ qua các tham số chuỗi truy vấn là gì? Đặt số lượng, bộ lọc, sắp xếp, v.v. vào chính URL đó sẽ cho tôi một số lượng lớn các URL để xử lý, và nó sẽ buộc mọi người phải nhớ liệu sắp xếp có đến trước khi đếm hay ngược lại hay không. – dthrasher

0

gì về một phiên bản đầy đủ PHP phù hợp như thế này:

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

lâu hơn một chút nhưng nhiều thuận và như tôi đã nói, phù hợp với PHP. ASP.NET có thể đã thực hiện hỗ trợ cho định dạng này.

này sẽ tạo ra một mảng, loại, trực tiếp trong đó mỗi yếu tố của loại có têndir tài sản.

6

Đối với REST, tôi thích một cú pháp trực quan hơn:

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

Và xây dựng hơn (không có dấu '+'):

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

Dễ nhớ ...

+0

+ và - là gì? i có nghĩa là những gì là asc và những gì tôi desc. –

Các vấn đề liên quan