用于多种排序的URL查询字符串约定

时间:2009-02-23 16:53:45

标签: url format query-string

我有一个RESTful Web应用程序,它支持一组项目上的多个排序字段。是否有将这些排序字段编码到URL的查询字符串中的通用约定?我正在考虑以下模式:

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

这将按作者排序书籍集合,然后按发布日期排序。

基本上,我需要一种方便的方法,使我的查询字符串中的名称 - 值对具有自己的名称 - 值对。我也需要做一些与上面的例子类似的过滤器参数。

Rails或ASP.NET MVC有这样的模式吗?是否有其他框架已经建立了处理此问题的方法?我宁愿使用熟悉的格式而不是自己的格式。

我也更喜欢使用尽可能少的URL百分比编码的格式。

4 个答案:

答案 0 :(得分:16)

在使用标准SQL排序语法之前,我已经完成了这项工作。那里有许多解析功能和技术。

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

将被编码为

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

答案 1 :(得分:13)

对于REST,我更喜欢更直观的语法:

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

更详细(没有'+'符号):

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

容易记住......

答案 2 :(得分:0)

完全符合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的每个元素都有 name dir 属性。

答案 3 :(得分:-1)

我会避免使用GET之类的参数。那怎么样:

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

我们的想法是,如果您需要根据条件优化资源搜索,请在URL上添加名称,然后添加参数值。如果您需要多个参数值,请用+。

分隔

这就是StackOverflow用于标记问题的内容:

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

我承认在最后添加计数/ 12看起来有点奇怪,但我想不出更好的事情。

相关问题