RESTful 漂亮的URL 设计是关于显示基于结构的资源(类似目录的结构,日期:articles/2005/5/13,对象及其属性,..),斜杠/
表示层次结构,使用-id
代替。
#分层结构#我个人更喜欢:
/garage-id/cars/car-id
/cars/car-id #for cars not in garages
如果用户删除该/car-id
部分,它会带来cars
预览 - 直观。用户确切地知道他在树中的哪个位置,他在看什么。他从第一眼就知道,车库和汽车是相关的。/car-id
也表示它属于一起,不像/car/id
.
#Searching# 搜索
查询是可以的,只有你的偏好,应该考虑什么。加入搜索时会出现有趣的部分(见下文)。
/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)
联合搜索在 id 1..20或101..103或999但不是5
的车库中
搜索具有3 个门的红色或蓝色或黑色汽车
然后您可以构建更复杂的搜索查询。(查看CSS3 属性匹配以了解匹配子字符串的想法。例如搜索包含 "bar" 的用户。)
/garage[id=1-20,101-103,999,!5]/cars[color=red,blue,black;doors=3]
user*=bar
#结论#无论如何,这对你来说可能是最重要的部分,因为你可以随心所欲地做,只要记住RESTful URI 代表一种易于理解的结构,例如目录/directory/file
,,,/collection/node/item
日期/articles/{year}/{month}/{day}
..和当你省略任何最后一段时,你会立即知道你得到了什么。
所以..,所有这些字符都允许未编码:
- unreserved:
a-zA-Z0-9_.-~
通常允许编码和不编码,两种用途是等效的。
- 特殊的角色:
$-_.+!*'(),
- 保留:
;/?:@=&
可以未编码用于它们所代表的目的,否则必须对其进行编码。
- 不安全:
<>"#%{}|^~[]`
为什么不安全以及为什么要编码:RFC 1738 见 2.2
另请参阅RFC 1738#page-20了解更多字符类。
RFC 3986 参见 2.2
尽管我之前说过,这里是分隔符的一个常见区别,这意味着有些“是”比其他的更重要。
- 通用分隔符:
:/?#[]@
- 分界线:
!$&'()*+,;=
更多阅读:
层次结构:见 2.3,见 1.2.3
url 路径参数语法
CSS3 属性匹配
IBM:RESTful Web 服务 - 基础
注:RFC 1738 由 RFC 3986 更新