《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 基于RESTful架構的RSS訂閱服務
基于RESTful架構的RSS訂閱服務
2015年微型機與應用第3期
董袁泉
(沙洲職業工學院,江蘇 張家港 215600)
摘要: 介紹了快速獲取信息和網站內容的最新更新的一種新技術——簡易信息聚合技術(RSS)的基本原理和主要功能;分析了Windows Communication Foundation RESTful架構在資源調用、特定環境下服務集成、數據傳輸等方面的優勢。結合WCF分布式網絡的開發工具,詳細闡述了在.NET平臺下對RSS技術的融合和支持,并通過實例進一步說明.NET平臺對RSS源的解析和實現過程。
關鍵詞: RESTful RSS URI 聚合
Abstract:
Key words :

  摘  要: 介紹了快速獲取信息和網站內容的最新更新的一種新技術——簡易信息聚合技術(RSS)的基本原理和主要功能;分析了Windows Communication Foundation RESTful架構在資源調用、特定環境下服務集成、數據傳輸等方面的優勢。結合WCF分布式網絡的開發工具,詳細闡述了在.NET平臺下對RSS技術的融合和支持,并通過實例進一步說明.NET平臺對RSS源的解析和實現過程。

  關鍵詞: RESTful;RSS;URI;聚合

0 引言

  隨著網絡的發展,作為分布式技術的Web服務越來越多地得到應用。為此,許多應用程序和服務使用SOAP協議,該協議將數據從本機語言格式轉換為應用程序和服務都能夠理解的標準格式(XML)。當客戶端應用程序使用SOAP協議與WCF服務通信時,數據以SOAP包的形式發送給服務器,服務器接收包,對它們進行解析,并解釋存儲在其中的數據。然后服務器處理數據并將結果以SOAP包的形式返回給客戶端應用程序。如果數據量很大,這將影響客戶端和服務器之間通信的速度,還將增加客戶端和服務器上的負載。因此這些類型的服務可能不適合需要頻繁傳輸實時數據的應用程序。在這種情況下,可通過實現RESTful服務使延遲降到最低,該服務使網站可更快地響應用戶請求而不需要考慮信息的安全性。

  REST(Representational State Transfer)是Roy Fielding提出的一個描述互聯系統架構風格的名詞。Web本質上由各種各樣的資源組成,資源由URI唯一標識,瀏覽器將展示出該資源的一種表現方式,或者一種表現狀態。如果用戶在該頁面中定向到指向其他資源的鏈接,則將訪問該資源,并表現出它的狀態,這意味著客戶端應用程序隨著每個資源表現狀態的不同而發生狀態轉移。REST風格的Web Services技術的出現,給推廣和應用Web Services帶來了新的活力。在大數據來回傳輸的交換中,RESTful表現了一定的優勢[1]。以上兩種服務的架構如圖1所示。

001.jpg

1 RESTful服務及其優勢

  1.1 RESTful概述

  Web環境下,在REST架構風格下設計的面向服務的體系結構SOA(Service-Oriented Architecture,SOA)稱為RESTful服務[2],RESTful服務強調的是資源及標識,因此在面向資源整合的集成系統中可以發揮一定的優勢。

  RESTful服務使用HTTP協議與客戶端應用程序通信。HTTP協議從Web服務器檢索網頁并將頁面交付給Web瀏覽器。這不需要將數據序列化和反序列化為標準格式,從而能夠快速響應用戶請求而不影響服務器的性能。

  REST代表表述性狀態轉移。在REST架構中,每一項都稱為一個資源,資源是用統一資源標識符(URI)表示的,URI唯一標識每個資源并提供資源地址。資源可通過鏈接進行訪問,當用戶在瀏覽器中通過URL地址訪問資源時,將返回資源(如sport.html)的表示,該表示將客戶端應用程序置于一種狀態。當用戶單擊資源(如sport.html)中的某個超鏈接時,將返回另一資源表示,新的表示將客戶端應用程序置于另一狀態,更改了先前狀態,通過這種方式,客戶端應用程序的狀態將隨每個資源的表示而更改。

  1.2 RESTful服務的設計原則

  REST架構是針對Web應用而設計的,其目的是降低開發的復雜性,提高系統的可伸縮性。RESTful提出了如下設計準則[3]:

  (1)資源抽象:網絡上的所有事物都被抽象為資源(Resource),比如圖片、音樂、視頻、文字、以及服務資源ID。在RESTful服務中,所有數據都以資源的形式表示。例如,某個組織通過其網站出售的產品詳細信息可以以資源的形式表示。每個資源應該具有唯一ID以供標識,這個唯一ID是資源URI。URI表示為:http://ReadME.com/products/product1,當用戶在客戶端應用程序中單擊以鏈接形式顯示的URI時,將向用戶顯示product1產品的詳細信息。

  (2)鏈接方法:資源的URI以鏈接的形式顯示。通過使用鏈接,用戶可以查看駐留在不同服務器或計算機上資源的相關信息。當用戶單擊鏈接時,鏈接將用戶帶到應用程序的下一網頁,其中顯示資源表示。這會導致應用程序狀態的更改。這使得應用程序變成動態并使用戶能夠在應用程序中或者在各種應用程序之間導航。

  (3)標準方法:RESTful服務使用HTTP協議與客戶端應用程序通信。當用戶在Web瀏覽器的地址欄中輸入URL時,針對URI所指向網頁的請求將傳輸到Web服務器。Web服務器接受請求并將頁面交付給瀏覽器。瀏覽器通過HTTP方法應答網頁的請求。這些方法是標準方法,允許瀏覽器與Web服務器交互。此外,這些方法允許用戶在數據庫服務器中檢索、插入、更新和刪除數據。一些Http方法如下:

  Post:向Web服務器提交要處理的數據。

  Get:請求網頁。

  Put:用于通過Web傳輸文件。

  Delete:用于刪除存儲在數據庫服務器中的數據。

  (4)帶有多種表示的資源:通過開發RESTful服務,可以各種格式(如XML,JSON,.ASPX和純文本)顯示數據,方法是以多種方式表示資源,例如:http://.../product1.xml,http://.../product1.json。在上述URI中,以多種方式表示了資源product1的詳細信息,這使構建在各種平臺上的客戶端應用程序能夠理解和使用RESTful服務發送的數據。

  (5)無狀態通信:RESTful服務以無狀態方式以客戶端應用程序通信。一旦用戶請求另一資源,RESTful服務即更改狀態。無狀態通信增加了服務的可伸縮性以同時處理多個客戶端的請求。

  1.3 RESTful服務的特點

  RESTful應用系統是一個面向資源的系統,具有如下特點[4]:

  (1)簡明的URI:RESTURI代表資源,其結構由控制器的名稱和資源的id組成,并不包含對資源的動作。

  (2)統一接口:REST要求使用統一的接口,統一接口獨立于資源的URI。任何對資源的操作行為都是通過HTTP協議來實現:獲取資源的一個表示用HTTPGET;向一個新的URI發送HTTPPUT或向一個已有URI發送HTTPPOST創建一個新資源;修改已有資源用HTTPPUT;刪除已有資源用HTTPDELETE。

  (3)資源可以有多種表示方法:對于控制器的同一個action,可以返回給客戶端html、xml或RSS不同格式的內容,依賴于客戶端的調用方式。

  (4)面向CRUD的控制器:所謂CRUD就是Create、Read、Update和Delete的簡寫。每個控制器都對應某個資源的CRUD操作。

  (5)更少的代碼和簡單的系統設計。

2 使用RESTful服務的數據格式

  RESTful服務可以用各種數據格式顯示數據,這些格式是使用不同方式(例如XML文檔、JavaScript文件和聚合訂閱源)表示的,要使用RESTful服務,需要了解不同的數據格式。RESTful服務允許以下列格式顯示數據:XML、JSON、RSS、Atom等。

  2.1 XML數據

  XML是用于傳輸駐留在不同位置的數據應用程序的數據格式。當用戶單擊以XML格式顯示數據的鏈接時,將向用戶顯示以標記形式顯示數據的XML文檔。要以XML格式顯示數據,需要編寫以下代碼:

  [WebGet(ResponseFormat=WebMessageFormat.Xml)]

  2.2 JSON數據

  JavaScript對象表示法(JSON)是輕量級數據交換格式,用于表示對象和數組的一種基于文本的人可閱讀的格式。JSON格式主要由啟用了AJAX的Web應用程序用于通過網絡傳輸數據。當用戶單擊JSON格式顯示數據的鏈接時,將向用戶顯示用于數據的JSON文檔。要以JSON格式顯示數據,需要編寫以下代碼:

  [WebGet(ResponseFormat=WebMessageFormat.Json)]

  2.3 RSS數據

  簡易信息聚合(RSS)是一種Web訂閱源標準,使用該標準可以以標準化格式頻繁發布更新內容,例如博客、新聞文章、音頻和視頻。它包含全文本或摘要文本。除了文本外,它還包含諸如發布日期和作者之類的元數據。可以使用<rss version=”2.0”>標記用于顯示RSS格式的數據,<channel>元素表示數據源。<channel>元素包含<title>、<link>和<description>元素,這些元素描述數據源。每個RSS的開始為XML版本聲明,接下來是<rss version=2.0>、<channel>、<title>、<description>等標簽,分別為RSS版本說明、頻道聲明、頻道標題、頻道描述[5]。

  在頻道標簽(<channel>)里又包含項目(<item>)列表,每個項目一般包含三個信息:標題、說明、鏈接,分別在<title>、<description>、<link>標簽描述。還允許其他的信息,例如日期(<pubDate>)、創建者的名字(<author>)等。上述的<channel>、<item>兩層結構即構成完整的RSS源。

  2.4 Atom數據

  Atom是在Web上以訂閱源的形式顯示數據的另一種Web訂閱源標準。Atom格式大多用于Web內容。<feed xmlns=”http://www.w2.org/2005/Atom”>標記用于顯示Atom訂閱源格式的數據。RSS和Atom是在網站上顯示或發布最新新聞或更新信息的最常用格式,這使用戶可以查看關于所需特定主題的最新消息。可使用聚合在網站上發布內容。聚合是在網站上廣播內容的方式,要在服務中實現聚合,WCF提供了聚合API,通過這些API包含各種類,可以以RSS或Atom格式顯示內容。

3 .NET平臺下實現RESTful服務的RSS數據的聚合

  聚合RSS(也叫聚合內容,Really Simple Syndication)是在線共享內容的一種簡易方式。通常在時效性比較強的內容上使用RSS訂閱能更快速獲取信息,網站提供RSS輸出,有利于讓用戶獲取網站內容的最新更新。

  在聚合中,數據通過Web訂閱源顯示,該訂閱源包含一組標準特性(例如標題、URL和描述)。這些特性描述Web訂閱源將在Web上顯示的內容。

  聚合架構提供聚合API,能夠在Web上顯示Web訂閱源。聚合API是包含訂閱源數據的用戶界面,也可以使用聚合API執行各種任務,例如查詢聚合詳細信息,聚合API提供各種類,能夠以RSS或ATOM格式顯示Web訂閱源,表1列出了.NET提供的一些聚合API類。

003.jpg

  在WCF中,Web訂閱源是以RSS或Atom格式返回訂閱源的方法。當客戶端應用程序實現聚合的RESTful服務時,會以RSS或Atom格式將Web訂閱源返回給客戶端應用程序。

4 RESTful架構下RSS訂閱服務的實現

  本文以一個汽車信息查詢服務網站為例簡述汽車信息查詢訂閱服務的實現過程。汽車分銷商要頻繁訪問各種汽車型號的詳細信息,由于數據庫連接問題,分銷商常常無法訪問詳細信息。因此,創建一個RESTful服務來確保最佳性能并在服務器應用程序中托管服務,在服務中實現聚合以便不依賴于數據庫服務器就可提供各種汽車型號的詳細信息。

  在使用面向資源的體系架構(Resource-Oriented Architecture,ROA)進行設計時,需要把真實的應用需求轉化成ROA中的資源,遵循以下的步驟:

  (1)對需求的數據集進行分析。

  (2)把數據集映射為ROA中的資源。

  (3)使用URI命名每一資源。

  (4)對ROA中的每個資源設計其表述性狀態Representational。

  (5)用hypermedia links表述資源間的聯系。

  4.1 托管服務端應用程序

  在服務端應用程序中主要包括一些ASPX頁面,如M001.aspx、M002.aspx、M003.aspx等,其中包含了各種汽車型號的詳細信息,這些頁面都是比較簡單的動態網頁,實現較為簡單,此處不再贅述。然后在IIS中新建虛擬目錄并定義一個別名如QueryCarDetailsClientApp,把汽車信息發布到IIS中。

  4.2 創建服務器應用程序

  開發工具采用VS2010,新建控制臺應用程序RestFulSevice,然后在項目中添加引用,選擇組件System.ServiceModel和System.ServiceModel.Web。以下給出創建Web訂閱源并在RESTful服務中實現聚合的主要代碼:

  [ServiceContract]

  public interface IService

  {

  [OperationContract]

  [WebGet]

  Rss20FeedFormatter GetCarDetails();

  }

  public class Service:IService

  {

  public Rss20FeedFormatter GetCarDetails()

  //實現RSS2.0格式的類

  {

  SyndicationFeed feed=new SyndicationFeed("Luxury Drive-Car Details","Car Details", null);

  SyndicationItem item1=new SyndicationItem("Model One","This is the content for Model One",new Uri("http://192.168.1.101/Query CarDetailsClientApp/M001.aspx"),"ItemOneID",DateTime.Now);

  …//item2,item3的代碼與item1類似,此處不再贅述

  List<SyndicationItem>items=new List<SyndicationItem>();

  items.Add(item1);

  ……

  feed.Items=items;

  return new Rss20FeedFormatter(feed);}

  }

  創建Web訂閱源之后,需要編寫以下代碼段在Web上顯示訂閱源,在Main()方法中輸入以下代碼:

  Uri baseAddress=new Uri("http://192.168.1.101:8000/Service");

  WebServiceHost svcHost=new WebServiceHost(typeof(Service),baseAddress);

  try

  {   svcHost.Open();

  XmlReader reader=XmlReader.Create("http://192.168.1.101:8000/Service/GetCarDetails");

  SyndicationFeed feed=SyndicationFeed.

  Load(reader);

  foreach(SyndicationItem item in feed.

  Items)

  { Console.WriteLine("Title:{0}",

  item.Title.Text);

  Console.WriteLine("Summary:{0}",

  ((TextSyndicationContent)item.Summary).Text); }

  Console.WriteLine("Press<Enter>to

  quit...");

  Console.ReadLine();

  svcHost.Close();}

  ……

  保存并編譯RestFulService項目。

  4.3 在客戶端執行并驗證服務器應用程序

  執行RestFulService應用程序,瀏覽者在客戶端借助于支持RSS的閱讀軟件(IE7.0以上版本的瀏覽器)打開這個RSS源鏈接(http://192.168.1.101:8000/Service/GetCarDetails),即能訂閱網站提供的RSS源。圖2為IE9.0瀏覽器打開RSS源的界面。單擊Model One鏈接,將出現汽車M001詳細頁面。

002.jpg

5 結束語

  典型的基于SOAP的Web服務以操作為中心,每個操作接受XML文檔作為輸入,提供XML文檔作為輸出。從本質上講,它們是RPC風格的。而在遵循RESTFul原則的ROA應用中,服務是以資源為中心的,對每個資源的操作都是標準化的HTTP方法[6]。可以看到,基于RESTFul構建的系統其擴展能力要強于SOAP,并且伴隨著Web Site as Web Services發展的趨勢,基于RESTFul架構的設計和實現,具有簡單性和強擴展性,有理由相信,RESTFul將會成為Web服務的一個重要應用。

  在服務器性能越來越好的今天,網站服務器已完全能夠高速生成動態RSS源。RSS訂閱提供的是一種經濟、實用的Web訂閱源標準,已被越來越多的網站采用。使用RSS訂閱源可以快速獲取信息,網站提供RSS輸出,有利于用戶獲得網站內容的最新更新。但是本系統提供的RESTful服務沒有考慮到信息授權、安全傳輸和統一檢索以及動態生成RSS源等問題,這將有待更進一步的研究。

參考文獻

  [1] 馬青霞,孫梅.基于RESTFUL服務的分布式遺傳算法[J].計算機工程,2011,37(24):164-166.

  [2] 馬青霞,高立輝.利用RESTFUL實現面向資源的服務集成[J].金陵科技學院學報,2012,28(4):27-31.

  [3] 李斌.基于Ruby on Rails的鐵路旅客傷亡管理系統的設計與實現[D].成都:西南交通大學,2010.

  [4] 潘冰.面向資源的RESTful Web應用研究[J].微計算機應用,2010,31(7):38-43.

  [5] 張冬平,郭東琿.采用C#實現RSS訂閱服務[J].計算機與現代化,2011(3):140-142.

  [6] 葉輝.面向電子商務的混搭應用技術研究[D].北京:北京郵電大學,2009.


此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 中文字幕亚洲综合精品一区 | 国产粉嫩嫩00在线正在播放 | 国产在线日韩 | 亚洲日韩中文字幕一区 | 中文字幕第38页永久乱码 | 久久久男女野外野战 | 一个人看的免费视频www中国 | 日韩伦理视频在线观看 | 色淫影院 | 精品国产第一国产综合精品 | 在线精品国产成人综合第一页 | free性欧美高清另类 | 网址你懂的在线观看 | 亚洲第一页在线视频 | 成人a毛片免费观看网站 | 亚洲色图欧美另类 | 麻豆成人在线视频 | 欧美在线一级视频 | 一个色亚洲 | 欧美成人小视频 | 美国一级做a一级爱视频 | 日韩一级淫片 | 另类异族videosex太狠了 | 国产精品久久亚洲一区二区 | 成人特黄午夜性a一级毛片 成人网18免费软件 成人网免费 | 日韩资源 | 国产福利在线 | yellow网站在线观看 | 一级黄色片一 | 曰批视频免费 | 成年人在线观看网址 | 深夜福利免费观看 | 奇米影视综合网 | 在线成h人视频网站免费观看 | 一本到视频在线 | 视频一区国产精品 | 欧美日韩高清不卡一区二区三区 | 成人va视频| 韩国理论免费 | 国产欧美日韩一区二区三区 | 91久久天天躁狠狠躁夜夜 |