REST是什么?
Friday, July 27th, 2007 其实昨天想写的叫“REST迷思”,不过今天看到这篇文章,我也”REST是什么?”
昨天整个下午我都在想REST到底是什么?我为什么要用它?应该用在什么地方?在骑车出门的时候还不停的在想,也没想很明白,本来还想发篇博客问问,没想到今天就有了。总的来说我还是比较同意dongbin的那篇文章的。
真正开始了解REST就是前一段时间,其实也不能说了解,就是看了一些介绍和视频。我也犯了老毛病,学到新东西就拼命的想往现在的项目上靠,美其名曰”学用,学用,学以致用”。
首先就碰到问题了。
1.比如:图书网站,有很多的书本,而书本属于某个用户。现在要开发图书列表和用户的图书列表。其实就是
/books/list
/users/leo/books or /users/leo/book_list or /users/leo/books/list
原来的想都不想两个action,处理book.find
当然了如果一个action可以优雅的解决问题那我还是趋向于一个action实现的,DRY嘛。(只是if else太不优雅了)
怎么用到REST呢?按模型来说,是这样的.
map.resources :users do |users|
users.resources :books
end
事实上这个是实现不了/books/list的。那就不用nested resources了,还是Controller加个action(哦,我可不喜欢/books;list_by_user这样的URL),还是增加一个controller?
那么那么,主要问题是什么呢(Ok,我个人的问题)?原来我的实现是直接从业务(需求,用户接口)映射到实现上来的,使用REST思考的时候呢?从model来考虑的? 至顶向下还是至底向上呢这是个问题。
用Rest是为很酷而又方便的url mapping吗?为了方便的列出model的关系吗?
2.一本书有很多章节.那么我的章节列表应该放在:
/books/1/sections (sections.index)
/books/1 (books.show)
里面呢? 如果按照Web Service的做法或是把REST当做Model的HTTP方式的接口(把book看做Resource)的话那么应该是在sections.index里面。而按照习惯我可能更喜欢/book/1里面显示sections list(至少,至少少一次点击。)。
Rest是Model的http接口吗?
3.“REST的主要优势在我看来其实在于它是一种对于服务器的更加有效的抽象方式。”(引用1)
按照这么说的话,个人认为REST并不适合于仅仅使用GET/POST的WEB应用的开发。在form里面加一个method的hidden变量然后把网址变成book;edit这样有意义吗?为了漂亮的mapping?只要你会写routes什么样的mapping写不出来?为了根据不同的format请求返回不同的结果?不用rest你也可以responds_to不同的format。
从WS的角度来说REST用HTTP的请求方式来映射function-name,只是为了方便理解?
到此以我对REST的理解来说我已经想不下去了,一团麻了。
REST到底是什么,适合我吗? 突然间我想到了04年刚刚接触敏捷是写的“你敏捷得起来吗?”,那么REST适合你吗?
上面的文字有太多的问号,正如我现在对于REST的问号。不过我觉的似乎从我现在的理解来说REST不适合于实用至上的我现在进行的这些项目。
引用1:http://blog.csdn.net/mozilla/archive/2007/06/07/1643095.aspx

