历史上操作系统目录结构是树:
C:
视窗
SYSTEM32
程序文件
共同文件
IE浏览器
REST架构模拟同样的事情:
HTTP://...//Thomas/
HTTP://...//Thomas/Mexico/Year2003/Photos
HTTP://...//Thomas/Mexico/Year2007/Photos
HTTP://...//Thomas/Finland/Year2005/Photos
HTTP://...//Thomas/Finland/Year2010/Photos
HTTP://...//Thomas/Finland/Year2010/Videos
HTTP://...//Thomas/USA/Year2005/Photos
但是,看看当前的结构,我需要进行搜索:
所有不是芬兰的照片?
所有2005年拍摄的照片?
时间线上的所有图片?
使用每个树层次结构组合执行REST接口效率不高.您需要更有效的信息管理; 你需要一个属性系统而不是树形结构.(哦,为什么操作系统不是基于属性?)
StackOverflow和Google似乎使用属性和语法"+" - 标记如下:
http://www.stackoverflow.com/Tags/asp.net+iis7
http://www.google.com/search?&q=iis7+asp.net
今天的框架如WCF和ASP.NET MVC对RESTful树结构有很好的支持.但是对属性结构有支持吗?难道你不会将属性结构称为REST吗?
我想创建一个属性-WebService并将其与Silverlight-client中的LINQ一起使用...哪种方法最好?:-)
为了创建有效的REST接口,您需要确定对客户端应用程序有意义的资源.如果你看一下你的用例:
所有不是芬兰的照片?所有2005年拍摄的照片?时间线上的所有图片?
您需要回答的问题是,这需要三个资源还是只需一个.我假设您想要的不仅仅是这三个查询,因此最灵活的解决方案是定义一个"图片集合"的通用资源.
/Thomas/pictures
从这里开始,您希望能够使用查询参数来限制此资源的内容.
/Thomas/pictures?country=not-finland /Thomas/pictures?year=2005
在第三个项目的情况下,为该项目创建单独的资源可能是有意义的.
/Thomas/PictureTimeline
在其他情况下,创建其他资源(如.)可能是有意义的
/Thomas/FavouritePictures
重要的是确定要将模型建模为资源的关键概念,然后为这些资源分配URL.尝试通过URL空间进行REST设计会让你头脑发热.