REST(Representational StateTransfer表述性狀態轉移)是一種針對網絡應用的設計和開發方式,可以降低開發的複雜性,提高系統的可伸縮性。
滿足這些約束條件和原則的應用程序或設計就是 RESTful。
Web應用程序最重要的 REST原則是,客戶端和服務器之間的交互在請求之間是無狀態的。從客戶端到服務器的每個請求都必須包含理解請求所必需的信息。如果服務器在請求之間的任何時間點重啓,客戶端不會得到通知。此外,無狀態請求可以由任何可用服務器回答,這十分適合雲計算之類的環境。客戶端可以緩存數據以改進性能。
在服務器端,應用程序狀態和功能可以分爲各種資源。資源是一個有趣的概念實體,它向客戶端公開。資源的例子有:應用程序對象、數據庫記錄、算法等等。每個資源都使用 URI (Universal Resource Identifier)得到一個惟一的地址。所有資源都共享統一的界面,以便在客戶端和服務器之間傳輸狀態。使用的是標準的 HTTP 方法,比如GET、PUT、POST 和 DELETE。Hypermedia 是應用程序狀態的引擎,資源表示通過超鏈接互聯。
另一個重要的 REST 原則是分層系統。
這表示組件無法瞭解它與之交互的中間層以外的組件。通過將系統知識限制在單個層,可以限制整個系統的複雜性,促進了底層的獨立性。
當 REST架構的約束條件作爲一個整體應用時,將生成一個可以擴展到大量客戶端的應用程序。它還降低了客戶端和服務器之間的交互延遲。統一界面簡化了整個系統架構,改進了子系統之間交互的可見性。
REST 簡化了客戶端和服務器的實現。
RESTful的實現:RESTful Web 服務與 RPC 樣式的 Web 服務
瞭解了什麼是什麼是REST,我們再看看RESTful的實現。最近,使用 RPC 樣式架構構建的基於 SOAP 的 Web 服務成爲實現SOA 最常用的方法。RPC 樣式的 Web 服務客戶端將一個裝滿數據的信封(包括方法和參數信息)通過 HTTP發送到服務器。服務器打開信封並使用傳入參數執行指定的方法。方法的結果打包到一個信封並作爲響應發回客戶端。客戶端收到響應並打開信封。每個對象都有自己獨特的方法以及僅公開一個 URI 的 RPC 樣式 Web 服務,URI 表示單個端點。它忽略 HTTP 的大部分特性且僅支持POST 方法。
由於輕量級以及通過HTTP 直接傳輸數據的特性,Web 服務的 RESTful 方法已經成爲最常見的替代方法。可以使用各種語言(比如 Java程序、Perl、Ruby、Python、PHP 和 Javascript[包括 Ajax])實現客戶端。RESTful Web服務通常可以通過自動客戶端或代表用戶的應用程序訪問。但是,這種服務的簡便性讓用戶能夠與之直接交互,使用它們的 Web 瀏覽器構建一個GET URL 並讀取返回的內容。
在 REST樣式的 Web 服務中,每個資源都有一個地址。資源本身都是方法調用的目標,方法列表對所有資源都是一樣的。這些方法都是標準方法,包括HTTP GET、POST、PUT、DELETE,還可能包括 HEADER 和 OPTIONS。
在 RPC樣式的架構中,關注點在於方法,而在 REST 樣式的架構中,關注點在於資源 ——將使用標準方法檢索並操作信息片段(使用表示的形式)。資源表示形式在表示形式中使用超鏈接互聯。
LeonardRichardson 和 Sam Ruby 在他們的著作 RESTful Web Services 中引入了術語 REST-RPC混合架構。REST-RPC 混合 Web 服務不使用信封包裝方法、參數和數據,而是直接通過 HTTP 傳輸數據,這與 REST 樣式的Web 服務是類似的。但是它不使用標準的 HTTP 方法操作資源。它在 HTTP 請求的 URI 部分存儲方法信息。好幾個知名的Web 服務,比如 Yahoo 的 Flickr API 和 del.icio.us API 都使用這種混合架構。
SNS類網站API
Facebook - http://developers.facebook.com/
人人網開放平臺 - http://dev.renren.com/
51.com開放平臺 - http://developers.51.com/
MySpace開發者平臺 - http://developer.myspace.cn/
Opensocial - http://wiki.opensocial.org/
Google Gadgets 小工具 API 開發人員指南 - http://www.google.com/intl/zh-TW/apis/gadgets/docs-home.html
Gadgets API 開發人員指南- http://code.google.com/intl/zh-CN/apis/gadgets/docs/dev_guide.html
Gadgets API -http://code.google.com/intl/zh-CN/apis/gadgets/
電子商務類
Amazon API -http://aws.amazon.com/
eBay API -http://developer.ebay.com/
淘寶開放平臺 - http://www.taobao.com/theme/tao_source/
微博API
Twitter API -http://apiwiki.twitter.com/Twitter-API-Documentation
Status.Net(Laconica) API - http://status.net/wiki/Twitter-compatible_API
新浪微博開發者平臺 - http://open.t.sina.com.cn
注:需要授權的開發者才能訪問,其API調用格式類似Twitter,但需要一個API Key用於認證管理。
搜狐博客開放平臺 - http://ow.blog.sohu.com/
Follow5 API -http://www.follow5.com/f5/jsp/other/api/api.jsp
嘀咕API - http://code.google.com/p/digu-api/wiki/DiguApi
做啥API - http://code.google.com/p/zuosa-api/wiki/ZuosaApiDoc
人間網API - http://renjian.com/api.html
9911微博API -http://www.9911.com/api.php
Google Maps API
Google Maps APIDeveloper Guide - http://code.google.com/intl/en/apis/maps/documentation/
Google Maps APITutorial - http://econym.org.uk/gmap/extensions.htm
GMaps Utility Library - http://code.google.com/p/gmaps-utility-library-dev/wiki/Libraries
GMaps Utility Examples - http://gmaps-utility-library.googlecode.com/svn/trunk/labeledmarker/release/examples/
Saving User-Added Form Data - http://code.google.com/intl/zh-CN/apis/maps/articles/phpsqlinfo.html
Firefox類
Mozilla 開發者中心的擴展開發專題 - https://developer.mozilla.org/en/Extensions
XUL 1.0 規範 - http://www-archive.mozilla.org/projects/xul/xul.html
更多地瞭解這種基於 XML 的用戶界面語言,它可以構建各種富跨平臺應用程序。
Mozilla Development Center 的 XUL 教程 - http://developer.mozilla.org/en/docs/XUL_Tutorial
Getting started with extension development 編寫一個最簡單的Firefox擴展 -http://kb.mozillazine.org/Getting_started_with_extension_development
Setting up extension development environment - http://developer.mozilla.org/en/docs/Setting_up_extension_development_environment
實戰 Firefox 擴展開發 - http://www.ibm.com/developerworks/cn/web/wa-lo-firefox-ext/
使用 XUL 實現瀏覽器擴展 (1) - http://www.ibm.com/developerworks/cn/web/wa-xul1/
使用 XUL 實現瀏覽器擴展 (2) - http://www.ibm.com/developerworks/cn/web/wa-xul2/
應用類
豆瓣API - http://www.douban.com/service/apidoc/
Flickr API -http://www.flickr.com/services/api/
Last.fm API -http://www.last.fm/api
Box.net API -http://developers.box.net/
Delicious API -http://delicious.com/help/api
API統計 - http://www.programmableweb.com/apis
最後總結一下:REST描述了一個架構樣式的互聯繫統(如 Web 應用程序)。REST約束條件作爲一個整體應用時,將生成一個簡單、可擴展、有效、安全、可靠的架構。由於它簡便、輕量級以及通過 HTTP直接傳輸數據的特性,RESTful Web 服務成爲基於 SOAP 服務的一個最有前途的替代方案。用於 web 服務和動態 Web應用程序的多層架構可以實現可重用性、簡單性、可擴展性和組件可響應性的清晰分離。Ajax 和 RESTful Web服務本質上是互爲補充的。開發人員可以輕鬆使用 Ajax 和 RESTful Web 服務一起創建豐富的界面。