在REST风格的漂亮的URL设计是用来显示基于结构的资源(类似目录的结构,日期:文章/ 2005/5/13,对象和它的属性,..),斜线/
表示分层结构,使用-id
来代替。
层次结构
我个人更喜欢:
/garage-id/cars/car-id
/cars/car-id #for cars not in garages
如果用户删除/car-id
零件,它将带来cars
预览-直观。用户完全知道他在树上的什么位置,在看什么。他从第一眼就知道车库和汽车是有联系的。/car-id
也表示它属于不同/car/id
。
正在搜寻
searchquery是可以的,只有您的偏好,应该考虑什么。有趣的部分是加入搜索时出现的(见下文)。
/cars?color=blue;type=sedan #most prefered by me
/cars;color-blue+doors-4+type-sedan #looks good when using car-id
/cars?color=blue&doors=4&type=sedan #I don't recommend using &*
或基本上任何不是斜线的东西,如上所述。
公式:/cars[?;]color[=-:]blue[,;+&]
,*虽然我不会使用该&
符号,因为乍一看它无法从文本中识别出来。
** 您知道在URI中传递JSON对象是RESTful吗?**
选项清单
/cars?color=black,blue,red;doors=3,5;type=sedan #most prefered by me
/cars?color:black:blue:red;doors:3:5;type:sedan
/cars?color(black,blue,red);doors(3,5);type(sedan) #does not look bad at all
/cars?color:(black,blue,red);doors:(3,5);type:sedan #little difference
可能的功能?
否定搜索字符串(!)
要搜索任何汽车,但不能 搜索黑色和红色:
?color=!black,!red
color:(!black,!red)
加入搜索
搜索红色或蓝色或黑色汽车行驶3门在车库编号1..20或101..103或999,但不是 5
/garage[id=1-20,101-103,999,!5]/cars[color=red,blue,black;doors=3]
然后,您可以构建更复杂的搜索查询。(有关匹配子字符串的想法,请参见CSS3属性匹配。例如,搜索包含“ bar”的用户user*=bar
。)
结论
无论如何,这可能是你最重要的部分,因为你可以做你喜欢的毕竟只是记住,REST风格的 URI代表的结构是很容易理解如类目录/directory/file
,/collection/node/item
,日期/articles/{year}/{month}/{day}
..当你忽略任何最后一个细分,您都会立即知道得到什么。
所以..,所有这些字符都可以不编码:
RFC 3986参见2.2
尽管我之前说过,但这是分隔符的常见区别,这意味着某些“比其他”更重要。
- 通用分度计:
:/?#[]@
- 亚微米
!$&'()*+,;=
更多阅读:
层次结构:请参见2.3,请参见1.2.3
url路径参数语法
CSS3属性匹配
IBM:RESTful Web服务-基础知识
注:RFC 1738由RFC 3986更新
/cars
并/car
没有语义,因此不是一个好主意。如果该类别下有多个项目,请始终使用复数形式。