本文中將使用工具輕松構(gòu)建終極的Hello World mashup:Google地圖mashup……
最后,還需提到的JavaScript 功能就是向后端服務(wù)器發(fā)出帶外 HTTP 請(qǐng)求。通過(guò)此功能, JavaScript 可以發(fā)出不會(huì)導(dǎo)致頁(yè)面重載或改變?yōu)g覽器地址欄的請(qǐng)求。該功能通常被稱為Ajax,但是實(shí)現(xiàn)該功能的實(shí)際上是XMLHttpRequest,它是調(diào)用 HTTP 請(qǐng)求的JavaScript 類。HTTP 請(qǐng)求通常是異步的,這要求編程人員定義一個(gè)回調(diào)函數(shù),在接收響應(yīng)時(shí)調(diào)用。
var request = new XMLHttpRequest(); function ajaxCallback() { |
我先討論在mashup 應(yīng)用程序中使用到的 XMLHttpRequest 功能的一個(gè)主要限制,然后才能討論該功能。
為了保護(hù)用戶免受惡意代碼編寫者的攻擊,所有瀏覽器都實(shí)現(xiàn)了一個(gè)安全功能。Same Origin Policy 防止XMLHttpRequest以返回頁(yè)面的服務(wù)器所在的網(wǎng)絡(luò)域之外的服務(wù)器為目標(biāo)發(fā)送請(qǐng)求。例如,如果用戶瀏覽 http://www./ajaxPage.html,該頁(yè)面上的 JavaScript 代碼則不能將XMLHttpRequest 到 http://www./stealCookies.html。雖然該安全功能能夠保護(hù)用戶,但是它限制了 JavaScript ?客戶端程序在mashup 應(yīng)用程序中的作用,mashup 應(yīng)用程序需要使用來(lái)自多個(gè)域的服務(wù)。然而,兩種資源類型不受這一策略的限制:頁(yè)面可以跨域下載圖片和腳本。通過(guò)JavaScript 將參數(shù)追加到這些資源請(qǐng)求中,一些實(shí)現(xiàn)解決了這一限制。
輕量級(jí)服務(wù)
調(diào)用遠(yuǎn)程服務(wù)的功能是企業(yè)分布式架構(gòu)的基礎(chǔ),例如面向服務(wù)的架構(gòu)(Service Oriented Architecture ,SOA)。Web服務(wù)技術(shù)(例如 SOAP)被廣泛應(yīng)用于創(chuàng)建企業(yè)內(nèi)的可重用服務(wù)。這些實(shí)現(xiàn)效果很好,但是在一些情況下SOAP 未免有些大材小用。特別在客戶端是瀏覽器時(shí),需要一個(gè)輕量級(jí)的解決方案。
一種構(gòu)建稱為 REST 的輕量級(jí)服務(wù)的方法開始流行,在Web 2.0 應(yīng)用程序中這種方法應(yīng)用得尤為普遍。 REST 提供了一種構(gòu)建 HTTP 可尋址服務(wù)的干凈模型,從瀏覽器可以很容易地調(diào)用該服務(wù)。對(duì)于REST 的完整學(xué)術(shù)定義不適合本教程,我總結(jié)了幾個(gè)要點(diǎn):
- REST 服務(wù)表示為一個(gè)URL,通過(guò)基本的 HTTP 請(qǐng)求訪問(wèn),例如http:///content/getArticles?author=joe。
- HTTP 動(dòng)詞很重要: GET 是讀操作, POST 是創(chuàng)建,PUT 更新服務(wù)。
- 返回的有效負(fù)載通常是XML 或 JSON。
將 REST 的含義解釋得更清楚可將會(huì)引起爭(zhēng)議,因此以上概括已經(jīng)足夠。
還需要進(jìn)一步解釋最后一個(gè)要點(diǎn)。以上列出了兩種流行格式作為返回的有效負(fù)載:XML 和 JSON 。似乎可以選擇 XML,它在全世界應(yīng)用廣泛。而 REST 服務(wù)可以返回XML,客戶端 JavaScript 代碼需要遍歷返回的 XML 的DOM ,來(lái)提取所需信息。這當(dāng)然可以,但是對(duì)于瀏覽器中的客戶端程序是JavaScript 的情況來(lái)說(shuō),還可以選擇另一種格式。JavaScript 對(duì)象標(biāo)志(JavaScript Object Notation ,JSON)是一種 JavaScript 對(duì)象序列化格式,它減少了客戶端的工作。客戶端可以通過(guò)調(diào)用將返回的JSON 文本反序列化成一個(gè)本機(jī) JavaScript 對(duì)象,然后可以使用JavaScript 語(yǔ)法操縱JavaScript 對(duì)象。這通常是個(gè)簡(jiǎn)單的方法,因此對(duì)于 Web 2.0 應(yīng)用程序使用的 REST 服務(wù)來(lái)說(shuō),JSON 很流行。
下面是一個(gè)序列化格式的 JSON 對(duì)象示例:
{"location": {"id": "WashingtonDC", "city": "Washington DC", "venue": "Hilton Hotel, Tysons Corner", "address": "7920 Jones Branch Drive" } } |