Fan's blog Rotating Header Image

REST的资源定位

Story是这样的:客户查找书籍,server返回一堆书,每本书包含一个书的详细信息的href。假设我有“书的详细信息”这样一个resource:

@GET @Path(“/book/{library}/{bookId}”)
public Response getBookInfo(…)

这样在server端,我们就需要build这样一个URI。通常做法是hard coding,REST(这里是JAX-RS)则使用这样的方法:

UriBuilder ub = uriInfo.getBaseUriBuilder().path(BookResource.class).path(BookResource.class, “getBookInfo”);
URI uri = ub.build(aLibrary, aBookId);

第一行代码中的getBookInfo是方法名。

个人觉得这种方式有些新意。当年Struts就是靠灵活的跳转机制流行一时,REST则充分利用了anotation,避免使用复杂的配置文件,而且代码上也比hard coding的URL更有维护性和可读性。当然,如果getBookInfo不用字符串则更能体现静态语言的优点了。

那么,为什么“资源的定位”对于REST很重要呢?

对于一个Web应用,URI是很重要的一部分,这包括他的schema定义、URI的build以及路由,涉及到web开发的方方面面。REST里面有个概念hypermedia as the engine of application state。以上面的例子为例,hypermedia指的是server端返回的一个指向书详细信息的link,这个link是在server端construct的,client端拿到这个link后,就知道下一步跳转的方向,这样flow运行下去。整个应用就如同一状态机一样,从一个状态跳到另外一个状态。如果拿到的比如是孤立的信息,比如aLibery和aBookId,这时候客户端就要知道如何build link,而这一般都不是很容易的事情,也增加了系统的耦合度。而server端build href后,URI schema变化的代价就更小。这样我们就不必拘泥于web 2.0所说的:一个href应该永远可以访问。

学习新技术的苦恼

这段时间项目中要用Dojo,于是一边做一边学习。坦白的讲,感觉有点吃力。很多东西跟Java是不同的。这个东西我们要马上用,这其中没有一个系统的学习过程,不可避免的有点手忙脚乱。有时候一个小问题,比如语法上的问题就要折腾半天,最后发现是一个低级问题。

我觉得自己还算是个有经验的编程老手,结果每每在这些小问题上纠缠不休,相当有挫折感。

可以有什么办法,一个项目你不可能一直做下去。而学的这个东西可能在下个项目中就用不到了,结果对每个新技术都是这样的一知半解。

最近搞iPhone开发,这个东西也是个大坑,跟web或者java开发差别很大,有自己的语言,自己的基础框架。技术越来越先进,越来越复杂,技术间的壁垒也越来越高!

1)对于语言,要坚持的学习,语言远不是说了解一种,对其他的就能举一反三。

2)要完整的学习。不能说只学习项目中要用到的技术点。当然没有必要学习的很深入,但是大的概览,主要的特点要知道。

2)要积累,多总结,不然经验只会跟年纪有关。

我以前都去干嘛去了?

昨天晚上,终于把小孩哄睡后,我和老婆在那里感叹:以前的过的多悠闲啊,下班后看看电视,还可以看看电影,现在忙的一天到晚头都是木的,哪有个人的时间。

但是我想起原来刚毕业时,那还是在厦门,每天下班时间和周末基本上都是空闲的,晚饭在外面吃,这样连做饭时间都省了,大把大把的时间都花在电脑上了。

但是我当时做了些什么事情呢?

我想不起来。很奇怪,时间就这样溜走了,一点记忆都没有。好恐怖啊!

我想大概也是装装软件,看看新的技术,瞎折腾,而终究也没有折腾个屁出来。套一句话:不是我玩电脑,是电脑玩我。或者说走火入魔了,是因为你控制不住这个东西了,把你内心蛊惑了,得学学内功心法。

“天空没有痕迹,而我已经飞过”。这个时候不能说这句话。

还好,这个blog留下了点东西。

upgrade to Ubuntu 10.10

There is a lot of time so I upgraded my Ubuntu to 10.10 even though it didn’t come to last release.

The biggest change is now it has a new theme: Ambiance-maverick-beta. Looks nice. Some called it “Light theme”.

And the nvidia driver looks not work with new kernel. You have edit /etc/X11/x.conf to change “nvidia” to “nv”, then you can login into X window, otherwise you will get a “no screen found” or “can’t load module nvidia” exception.

Freetype has been upgraded to version 2.4. This version turn on “Turetype bytecode” by default since this patent has expired. But I didn’t find big changes at font rendering of this version.