OpenAPI和REST

REST(Representational StateTransfer表述性狀態轉移)是一種針對網絡應用的設計和開發方式,可以降低開發的複雜性,提高系統的可伸縮性。



 
REST指的是一組架構約束條件和原則。
   滿足這些約束條件和原則的應用程序或設計就是 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 都使用這種混合架構。


    下面是一些網站的OPENAPI平臺:
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 服務一起創建豐富的界面。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章