我有一个RESTful Web应用程序,它支持一组项目上的多个排序字段。是否有将这些排序字段编码到URL的查询字符串中的通用约定?我正在考虑以下模式:
http://myapp.com/books?sort=author:asc,datepublished:desc&count=12
这将按作者排序书籍集合,然后按发布日期排序。
基本上,我需要一种方便的方法,使我的查询字符串中的名称 - 值对具有自己的名称 - 值对。我也需要做一些与上面的例子类似的过滤器参数。
Rails或ASP.NET MVC有这样的模式吗?是否有其他框架已经建立了处理此问题的方法?我宁愿使用熟悉的格式而不是自己的格式。
我也更喜欢使用尽可能少的URL百分比编码的格式。
答案 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看起来有点奇怪,但我想不出更好的事情。