12/22/2006

華文 REST 討論文章網摘

說到這就要講到我在 滿紙荒唐言,一把心酸淚,裡面所講到的
Rails 1.2 + REST : 討論 Rails 的核心價值 這篇更是可笑,我連REST 的好處都不甚了解,就大張旗鼓的吹 REST 的好?

我當然不是作學問態度那麼隨便的人,所以我開始花時間去整理大家對 Rails 1.2 裡面 REST 的用法以及玩法,先看看大家怎麼講,再慢慢自己學習 REST 的概念也是很好的。

以下就是華文 REST 討論文章網摘大集合。


  • 引述 :『Rails 1.2的主要亮点是REST。可以这样说,经过这次升级,Rails成为第一个把REST作为核心思想的主流Web框架,从而把其他的竞争性的敏捷Web开发框架又一次抛在了身后。』
    孟岩說明 Rails 1.2 對於 REST 的東西
  • 著名的Web技术专家、HTTP等诸多Web协议的主要起草人Roy Fielding从加州大学Irvine分校获得博士学位,其博士学位论文中描述了一种分布式软件的体系结构风格,被称为REST。
  • 引 述 :『今年7月份举行的RailsConf 2006上,David Heinemeier Hasson作了一个主题演讲,很清楚地讲了Rails 1.2中对于REST的设计,以及REST风格给Web应用设计思想所带来的革新。我第一次看到这个视频,就认为这可能是对Web服务端开发具有历史意义 的一次演讲。』
    孟岩對於 DHH 的翻譯
  • 引述 :『REST的意义不在于做一个网站,而在于网站间的互相调用变得异常直接。网站间的调用,也可以理解成不同系统间的调用。

    比如一个公司的CRM、workflow、财务系统、website...可以是一套大系统,那样太繁杂,也可以是分别几个独立的系统(decoupled systems),但是互相调用metadata就会非常不方便。一般有这么几种方式实现(从差到好排序):
    1、A系统直接调B系统的数据库
    2、用程序访问B系统的网页,取出A系统需要的东西
    3、各系统把经常要访问的功能写成web service
    4、各系统做一套api
    5、REST

    上面的例子说的是公司系统,大众网站也是如此,如果大家都用REST,mashup也会更容易,好的应用会更多。』
  • 引 述 :『Constraints is FreedomCRUD 形成了一种约束,把我们从权衡Controller和action风格这种无聊的事情中解脱出来,按照统一的风格来编写程序以及构造URL。使我们有精力 关注更重要的事。REST还避免我们编写大的Controller。可曾有人后悔曾经写过的包含十几个action的,并且action之间毫无联系的 Controller呢?其实大部分情况下,一个Controller有7个action就够了,并且这些action关注于同一Model,大大提高了 正交性.』
  • 引 述 :『Rails REST特性可以让Web服务技术用平台独立或编程语言独立的方式相互通信,各个不同应用程序之间的远程过程调用从来都是相当麻烦,今天试用了一下 REST,相比SOAP 和 WSDL 的确非常简洁好用。现在能够领会DHH在Rails的演讲中说的:“我不认为Rails应该向外部世界屈服,恰恰相反,Rails正在有力地让外部世界向 我们屈服。”这是狂,不过DHH也有资格狂!』
  • 引 述 :『我总觉得REST应该用于提供数据而不是页面,还是用用户和圈子作例子吧,感觉顺畅一些。比如某个用户的页面,他选一个圈子,点击“加入”就加入了这 个圈子;而圈子的管理员也可以选择用户,并点击“添加”把用户加入圈子。这里2个页面完成的是同一个操作,都是创建一个用户-圈子的关系,但操作完以后的 页面转向会不同。如果用REST来提供页面,如何来处理这些转向?另加参数?那不是搞复杂了嘛。所以我觉得应该是浏览器上通过AJAX请求这个 action,返回数据,浏览器脚本把数据处理成显示,这也是AJAX最适合的方式。如果只提供数据,实际上不需要7种action,4种就可以了』
  • 引述 :『ESTful核心就是资源,把关系也看作是资源,所以用户加入和退出组可以改成用户与组的关系这个资源的创建和删除。基于这一点我觉得RESTful应该翻译为REST风格,不给它个合适的中文词汇来代替,总是理解起来有些偏差。』
  • 引述 :『设想REST流行起来,新网站都缺省地提供符合REST标准的API,整个internet就是一个巨大的类库,这才是真正的webOS。这才是REST的魅力所在,是激动人心的地方,不是仅仅为了某单个项目的优化。』
  • 引述 :『ails生成XML轻而易举,Rails 1.2的REST也是一项另人心动的功能,而Spry也是以资源作为操作对象,这2者结合会发生什么?我试着学习Spry的内涵,并结合Rails做点测试性应用,以确定是否值得迁移稍大点的项目到它上面。』

  • 引 述 :『在許多地方看到了Rails 1.2將支援REST的消息,但是好像沒有在中文網頁說明rails是怎樣去實作REST的,那麼就來自己try try看囉...目前看到最重大的改變有兩項:1. scaffold_resource generator2. route map.resource』


iHower REST 系列
  • 引 述 :『重點是了解 resources 觀念: 為每個 resource 用單一 URI 定位,忘記用不同URL syntax來觸發不同動作的傳統思維吧(別用 ?action=somepage 之類的東西),URL應該是名詞而不是動詞。設計這個 resource 使用哪種 (HTTP) verb,設計有哪些 content types。』
  • 引述 :『本來這篇想寫的仔細點,不過後來我發現AWDwR第二版講 Resource-Based Routing 的頁數還不少(十幾頁吧,還蠻詳細的),要用 Rails 的人應該都去買一本,我想我這裡就不巨細靡遺了… :p』
  • 引述 :『什麼是REST?

    REST 是一種分散式超媒體系統(如WWW)的軟體架構風格,你可以想像它是一個良好設計的Web應用程式規則: 一組網路Web頁面(虛擬的狀態機器),其中 Client 透過點選超連結(狀態變換),結果是下個Web頁面(表示應用程式的下一個狀態)。』
  • 引述 :『Rails RESTful 系 列 彈 第四篇,我在這裡做些 Rails RESTful 工具介紹,相關文章有 REST tools for Rails 1.2。』
  • 引 述 :『我們花了好幾篇學習為何 RESTful 跟如何用 map.resources 來架出 server-side provider,而具體的重大好處則會在 ARes 中體現出來,我們可以像對 ActiveRecord 的物件操作一樣來處理 ARes,只是它的內部運作對象變成 Resource 而不是 Database (你感覺不到你在用Web APIs :p)。』
  • 引述 :『DHH的投影片提到一個概念:

    Constraints are liberating (a straight jacket for your mind)

    這裡指的 Constraints (制約) 是什麼? 我想指的是 Controller 不出以下七種 action』




3 則留言:

Kiwi 提到...

你好,久仰大名
我本身也是個Web Programmer,在資工研究領域是Grid,P2P和WebService

看到你的文章,想與你分享一些心得。

我在這一年感受到了台灣許多Programmer心中的一些震撼,不僅是在技術上,連觀念都被很多媒體(如IThome)和你這樣前瞻性的文章影響。

但是我在學弟的身上看到的不是這一回事,年輕一輩的還沒寫過幾行程式,卻提出問題讓我深思。他說「那麼多技術名詞我到底該相信誰?」確實現在媒體的傳播力,已經到了可以混淆視聽的地步,大家都說自己的技術好,甚至優缺點都比得出來,那誰的最好?

1. 其實REST就是輕量化WebService的一種,這個發展是相當自然,如同DAP->LDAP。儘管Ruby的快速開發對他有幫助,可是REST不應該總是和Rails綁在一起講。你可以閱讀http://www.xfront.com/REST-Web-Services.html有關Not a standard小節,W3C並未將他納入標準是有其理由。此外,只要你去研究一下什麼是WebService和分散式計算理論(就是你說cvu的那一段話),你就可以瞭解REST的優點。

2. 缺點在於,WebService輕量化的後果,也就是安全性問題,舉個例子emule或BT讓你交換檔案很快速,但是你無法確認你絕對不會下載到病毒,甚至有人會故意放毒。現在Google API是靠著key來處理安全性,等到用量一增高或是像REST這樣大開門戶,就需要放更多心思在anti-spam上。

新的東西不會一下子就迸出來,所有Web技術都是漸進發展的,而究竟「他們的本質是什麼?」,我認為工程師應該多注重這些問題才不會被技術的衰退和興起所影響。對一個問題深入探討時,也不會失去焦點。希望可以與你共勉之!

thegiive 提到...

哇,您好...

我很喜歡一句話『一個問題,多種解法,各自有各自的精彩』

一個技術是不是有用是看在你怎麼使用他,而不是在於他有多少缺點。當你的需求可以將這個優點極大化,將許多優點極小化。那你就成功了。

歡迎你寄信給我,我們可以做個進一步的討論 :)

匿名 提到...

我想要知道一些關於 RoR 可以調用其他網站提供的 API , 結果找到這邊來

但是發現這個討論完全沒有講到實作的部份
請問有沒有實作的範例可以參考?

ex: 連繫 youtube 影片的 REST api 該如何在RoR 中實作 ?