初识REST资源服务,感觉春天总算到了。“Web服务器只提供资源服务”,多么清晰简洁的表述。这表述让我欣喜若狂,所有困惑一扫而光,接下来赶紧深入了解。
要提供资源服务,首先需要对资源进行定位,然后才能对资源进行进一步操作。这与面向对象思维模式一致,先找对象,然后对对象进行操作。REST告诉我们,可以通过URL进行定位。比如,要访问学生张三,可以写出如下的URL:
/students/张三
说法很正确,也很笼统。对于资源定位,REST没有给出更明确的说法。通过实践与总结,我们发现资源定位应该分两种情况。一种是定位到单个资源,如上面的学生张三。另一种是定位到集合,如定位到所有学生的集合。定位到单个资源与定位到集合,能进行的变更操作是不同的。当定位到单个资源时,比如学生张三,能进行的变更操作只能是修改或者删除。而定位到集合,能进行的变更操作只能是添加或者移除。请注意:删除与移除动作的区别,移除是指把对象从集合中去掉,而对象本身还在,而删除则是指把对象彻底从系统中删除。
以上是我们对资源定位的第一点看法。第二点看法,当从系统中获取资源内容,而不是进行变更时,URL是否合适?答案是否定的,这时候更合适的表示方式是XPath,因为XPath可以在路径中包含条件。比如要获取一年级一班年龄大于7岁的学生家长的职业,可以写出如下的XPath表示:
/grid[1]/class[1]/student[age>7]/(father/job,mother/job)
XPath是我们目前发现的,最适合检索的表示方式,比SQL、HQL等都直观简洁。在具体实现中,我们把XPath翻译成了HQL,然后调用HQL查询完成检索工作。
XPath不足处在于无法进行排序,我们会对XPath语法进行扩充,以满足排序要求。