Web API(Application Interface)簡單來說,便是透過開放的網際網路傳輸協定,將提供的服務內容以標準的界面來定義,以便進行點對點之間的服務整合。由於運行的平台是 在Web架構之上,故常見的技術像是HTTP中的GET/POST、SOAP/HTTP, XML/RPC等,都是主要的組成架構,所定義的資料交換大都是屬應用層以上。由於HTTP為企業對外及對內均會開放的傳輸協定,業已發展成熟,故以 HTTP為基礎的Web API也降低了應用服務在整合上的門檻。
山「谷」之「歌」, 餘音繞樑

Google 致力於網路技術研發及創新服務的提供不遺餘力,從Web平台到個人桌面化服務,處處可見Google的蹤跡。它在網路世界的佈局已經由點(單一個別的 Google服務)展開到線(Google服務之間的彼此整合),未來將逐漸擴展到面(提供網路服務整合平台),可謂將Web 2.0的精神發揮得淋漓盡致。

延續對李開復的挖角事件,以及Google在台如同神秘般的徵才流程,不管是「谷歌」還是網路上所戲稱的 「股溝」,Google對網際網路所造成的影響已是有目共睹,它的一舉一動已經成為業界必然注目的焦點,紛紛被同業視為模仿及學習的對象,每次新服務的問 世都對業界造成不小的震撼,甚至威脅到相關既有服務的平台供應商,實在是令人又愛又恨的網路巨人。

條條大路通Google

您 會發覺Google所提供的網路服務到處都可以見到,像是使用率最高的網頁搜尋引擎,桌面搜尋機制,即時通訊及電子郵件服務。就因為它友善方便的使用方 式,讓使用者的接受度大大提高。加上Google技術領先的優勢,提供高品質的產品及服務,更因此讓使用者的忠誠度居高不下。

使用者除了 可以直接上Google的網站使用它們提供的服務之外,Google提供了這些網路服務的API配方,讓許多廚師們都可以拿它來精心調製出美味的佳餚,隨 廚師的創意提供千變萬化的網路服務,讓大家都可以享受Google這個網路服務平台,使得您設計的應用程式內容更加豐富完整。

輕輕鬆鬆跟Google打交道

在Google所提出的服務精神,希望每個網際網路使用者都能享受它們所提供的任何服務,當然不只是資訊人員。所以在與Google服務整合上,也讓使用者不會感到有相當高的門檻,也能輕鬆上手。

過 去大家討論的API通常會圍繞在程式碼上打轉,實在太嚴肅,會讓讀者們覺得那是要會寫程式的人才會用到的東西,事實上在所有Google所提供的眾多服務 中,也提供了不需要撰寫程式亦可以使用的整合界面,使用的方式都是相當輕鬆容易的,而且其強大的功能會讓您直呼不可思議呢!

就目前Google所提供的網路服務API,依其功能型態及使用時機大致上分成三大類:

  • 強化網站功能(Enhance Your Web Site)

若您已經有自己的網站或部落格,可以透過這類功能來強化您網站的機制,以及提供完整的網站分析管理功能,讓經營您的網站更省事,更簡單。

  • 一般使用者功能(Reach Google Users)

主要針對Google所提供的Client軟體,適用於一般使用者,提供可以安裝在個人電腦桌面中的小工具(Gadget)。這些以XML為主要撰寫語言,讓您的日常工作可以透過桌面與Google之間的密切結合更有效率。

  • 提供整合界面(Integrate with Google)

這是針對進階使用者,尤其是具有程式撰寫能力的開發人員所提供的程式界面,您可以依您所擅長的程式語言(Java, Perl, Python, PHP, Ruby及.NET等),透過標準的傳輸協定及開放標準來進行實作。

接下來便針對一些熱門的API功能進行介紹。

Google AJAX Search API

在 所有Google的Web服務中,最常被大家使用的便是其強大的搜尋引擎功能。在一個功能完整的網站裡,搜尋機制已經是基本配備,在過去這樣的功能需要導 入某特定搜尋引擎的軟體套件,安裝在自己的機器上才能達成的理想,現在僅僅需要在Google網站上申請一組API License Key,便可以享受Google既有的搜尋功能,而不需要在自己家裡搞一套搜尋引擎主機。

若您對撰寫程式有很大的學習障礙,Google提供了一種懶人機制,以增加HTML及JavaScript程式碼的嵌入方式,就可以將Google的搜尋機制免費安裝到你的網站中,而且還結合了最酷炫的AJAX技術,這樣的搜尋機制遠比自己動手寫程式來得容易多了。

從 圖中您便可以很清楚看到,透過這樣的整合,不只是提供網頁內容的搜尋,連視訊、部落格、新聞、地圖等內容都可以一併呈現。這些不同性質的內容是透過 Google Gadget元件組合而成,像是Video Gadget、Map Gadget等,模組化的結構讓您可以彈性變動搜尋的結果,而在這個內嵌框架的裡頭所使用的AJAX呈現技術,讓操作方式更加友善便利。

Google Web API

當 然,除了簡單的嵌入整合方式,手癢的程式開發者也可以透過Google所提供的API來將它的服務整合到自己的應用程式中,Google針對搜尋機制提供 的API十分完整,您可以透過Web Services的業界標準界面讓整個操作使用更加流暢,這便需要花點心思寫點程式才有辦法達到的,可以依照您的需求進行客製化,整合程度更高。

這 個函式庫裡包括了.NET(C#), VB及Java的範例程式、WSDL描述檔、API參考手冊,及Java Doc文件。由於目前的Google Web API是透過Web Services的架構,所以只要依照WSDL描述檔的定義,以SOAP的方式呼叫取得搜尋結果即可,所以只要程式語言本身可以撰寫出SOAP Client就可以使用。若您是採用Java為主要開發語言,Google Web API提供已經包裝好的SOAP Client程式庫,只花幾行程式即可撰寫完成,相當容易。

為了讓資源能有效分享給普羅大眾,Google針對每個申請者有使用上的限 制。針對每個使用授權每日僅能呼叫1000次,而且每次的查詢結果僅回傳前1000筆,回傳則以最多10筆為一個單位,而搜尋內容則不包括圖片、新聞等其 他內容,僅限於網頁資料,如此設計均是為及提昇執行效能所做的考量。

當然,這樣的函式庫是提供研究性質之使用,而未被授權於任何與商業有關之應用。在使用之前您最好還是詳讀一下授權合約內容。

Google Web Toolkit (GWT)

相 信您使用了一些Google所提供的服務後,會對它在網頁上呈現的AJAX動態效果印象深刻,這樣的設計對於使用者經驗是有正面評價的。但對AJAX這樣 的技術也許對許多開發人員仍然是陌生的技術,要能及時熟練上手也許會有困難,加上AJAX本身在開發測試過程中會有一定的困難度,故貼心的Google研 發團隊便將其相關的技術以Java方式來呈現,提供更廣泛的Java使用者也能開發出AJAX的應用程式。

您可以將GWT視為Java軟 體框架,GWT具備了動態可重用的特性,開發者只需要引用GWT提供的程式庫即可設出美美的AJAX UI畫面,避開了在Javascript程式撰寫時不易除錯的問題,所有的開發方式可以依循原有的Java開發程序,結合您所熟悉的Java IDE工具(像是Eclipse)進行開發,同時也可以與JUnit整合,將單元測試自動化以提高效率。

GWT提供了Java-to- JavaScript Compiler,可以將您結合GWT所撰寫的Java程式碼轉譯成具備AJAX功能的JavaScript內容。在開發過程中,您可以利用Host Mode對Java程式進行測試,而不需要每次都轉成JavaScript才能測試最終產生的結果。而Web Mode則是將所有的Java程式轉成JavaScript後實際以Web界面執行的方式。

在GWT裡已經幫您解決了AJAX對不同瀏覽器的支援問題,您只需要針對UI版面配置進行設計即可。GWT提供了數種Panel應用在不同的版面配置,類似AWT中的Layout Manager功能,所以你會發覺程式的寫法有點像在寫Swing應用程式。

Google Map API

若 您的應用程式中需要提供地理資訊,包括地理行政圖、地區街道明細、以及路線規劃建議等, Google Map服務是個不錯的選擇。它提供了世界各地的地理資訊,同時可以選擇地圖、衛星鳥瞰圖、以及混合顯示等呈現方式。進一步它還可以提供您設定起迄點之間的 實際距離,以及最佳路線建議等。

若您只是使用呈現地圖的單純功能,那就太小看Google Map了。為了讓地圖能更具可讀性,在上面加註資訊是免不了的。Google Map API提供了Marker(以標識符號突顯某特定的地點),InfoWindow(加註說明文字於訊息框中),及Polyline(以畫線方式標示路線或 範圍)等註記方式。其實在技術上的整合亦十分簡單,此API亦是利用HTML與JavaScript內嵌方式來達成。

此服務整合常見的應用如房屋仲介(提供查詢物件的所在地理資訊),求職訊息(提供徵才企業的所在位置),旅遊情報(提供旅遊景點位置及重點地標),交通路況查詢(提供兩地之間最佳路徑)等,讓僅僅只是冰冷的地址文字加上更豐富的圖像資訊。

美 中不足的是,目前Google Map對於台灣地區的地圖資訊提供僅限於衛星影像,而行政地圖的部份仍然未臻完整,對於想要提供區域性網站資訊的內容則稍嫌不足。而類似的服務您也可以參 考由國人開發的UrMap你的地圖網(www.urmap.com),此網站服務亦提供Web API可供呼叫,使用的元件架構也十分類似Google Map的設計方式,加上其提供的台灣地圖街道行政區資訊較為完整,比較符合國內網站的應用需求。

Google Toolbar API

對 於Google工具列應該大家都不陌生,其方便強大的功能已經成為瀏覽器的必備套件。在下載安裝Google工具列之後,在工具列上預設的按鈕功能也許仍 然無法滿足您的需要,所以Google工具列提供了API讓有興趣自行設計工具列按鈕的玩家們來使用,您也可以在Google 工具列上設計自訂按鈕功能,將一些常用的網址連結、RSS資訊提供內容放到工具列上,在使用上更為便捷。

只需要撰寫簡單的XML檔案,引用Google工具列特定的標籤語法,就可以製作出您想要的功能按鈕。您也可以到Google工具列的按鈕集頁面中,搜尋別人已經提供的工具列按鈕,也可以將您的精心傑作與其他Google工具列的使用者分享。

Google Desktop SDK

Google除了在網路服務上有著卓越的使用率外,對於個人桌面的市場亦野心勃勃,自行推出桌面搜尋工具後,連微軟也不得不承認一向佔有優勢地位的桌面也感受到威脅,也推出類似的桌面搜尋工具,頗有相互較勁的意味。

新 一版的Google Desktop 4除了包含既有的桌面搜尋功能之外,還提供可以與網路服務直接連結的側欄(Sidebar)功能,讓您不需要開啟網頁瀏覽器也可以使用Google提供的 網路服務。側欄可以讓您下載安裝許多與Google現有網路服務結合的Gadget小工具,像是即時新聞氣象服務、Gmail個人郵件瀏覽、個人相簿、行 事曆及待辦事項等等。Google已經將Desktop視為網路服務的延伸平台,讓它的服務更能深入個人桌面前端,結合得更密切。

當然在 Desktop平台方面,Google也提供了開發Gadget的SDK,讓您可以設計出屬於個人色彩的桌面小工具,成為側欄的一部份。SDK支援 JavaScript, C, C++, C#, and/or VB.Net等技術,下載的SDK中也包含一視覺化設計工具Gadget Designer。Google也鼓勵那些網站內容提供者,利用Google Gadget SDK開發出自己網站專屬的Gadget,並公佈到Google的目錄中供下載使用,進而讓更多的使用者認識這些具有特色的網路服務,打響自己的知名度。

其他Google API

Google API種類繁多琳瑯滿目,以上僅針對較常被使用的部份進行介紹。如果您需要參考關於Google API的技術資料,您可以造訪http://code.google.com,這兒包括了所有的API分類及相關說明,函式庫也是從這兒下載使用。以下便 列出所有Google API的清單供大家參考:

Google API 說明
Google Account Authentication 針對Client軟體(ClientLogin API)及Web應用程式(AuthSub API)對Google會員的身份認證功能。
AdSense API 提供與Google網路廣告的整合,可以在您的網頁上置入AdSense網頁,利用Google播送平台發送網路廣告並進行相關的廣告管理功能。
AdWords API 提供廣告客戶自己的應用程式可直接對Google AdWords Server主機進行廣告活動設定及管理。
Google AJAX Search API 提供Web Search功能以AJAX方式呈現,在您的網頁上以嵌入方式提供Google搜尋功能。
Google Base Data API 提供對於Google Data的資料存取功能
Blogger Data API 與Blogger服務整合,提供從您的網路服務對Blogger.com的內容進行編輯的功能。
Google Calendar Data API 與Google Calendar服務整合,可以透過它進行事件更新,
Google Data APIs 提供針對Google Blogger, Google Base, Google Calendar等服務的資料交換功能。
Google Desktop SDK 提供建構在Google Desktop平台上的開發工具,應用程式可以直接利用它來開發出桌面小工具。
Google Earth KML 利用KML定義的地理資訊來與Google Earth服務整合。
Google Gadgets API 用來開發Google Gadget小工具,Gadget又分成Universal Gadget及Desktop Gadget,依您的需求使用不同的API來進行整合開發。
Gmail Atom Feeds 提供以Atom方式呈現Gmail信收件夾內容,將Gmail內容整合到您的網頁中以利快速閱讀。
Google Checkout API 與Google提供的電子商務線上付款機制整合。
Google Web Toolkit 提供以Java程式庫設計Web AJAX界面之功能。
Google Groups Feeds 提供搜尋網上論壇(Groups)並以Atom或RSS呈現結果
Google Maps API 提供與Google Map服務整合,在您的網頁中提供地圖服務,並與網頁資料密切結合,提供圖文並茂的呈現方式。
Google News Feeds 提供搜尋新聞(News)並以Atom或RSS呈現結果。
Google Related Links 取得Google搜尋結果後之類似網頁的內容。
Google Search Appliance APIs 提供了Search Protocol, Feeds Protocol, Authorization Protocol三種資料傳輸協定
Google Search History Feeds 提供個人化搜尋歷史記錄之查詢, 包括網頁, 新聞等內容的搜尋記錄。
Google Sitemaps 提供讓Google搜尋能更精確的方式,提高您的網站在搜尋結果的曝光率。
Google Talk XMPP 提供與Google Talk之間訊息傳遞的通訊協定。在您的應用程式中需要提供與Google Talk相互聯繫或狀態查詢時可使用。
Google Toolbar API 提供Google工具列客製化按鈕的功能。
Google SOAP Search API 透過Web Services方式呼叫,將Google的搜尋功能整合到自己的應用程式或網頁中。

與開放源碼社群的緊密結合

除了Google自己提供的工具套件及程式介面外,您也可以在開放源碼社群中找到不少與Google服務有關的專案。為Google如痴如狂的使用者不在少數,這些開放源碼提供了Google功能的延伸應用,也是您的不賴的另類選擇。

若您是Mozilla FireFox的愛用者,除基本功能已經提供了Google的搜尋功能列之外,您還可以下載安裝針對Google量身設計的擴充套件(Extension)來使用,像是CustomizeGoogle等。

結語

在Web 2.0的世界中,Google只是其中一個比較顯著且知名的例子,其他像是Amazon, Delicious, Cocomment等許多網路服務平台,也都提供Web API的機制。單純來自一種資料來源已經無法滿足現今網路使用者的需求,未來的服務將是以軟體混搭(Mashup)的概念(意即Web應用系統整合多種不 同的資訊來源)來發展,資訊的整合勢必是未來的趨勢。

Web APIs已經是Web 2.0時代不可忽視的一項重要特色,過去在API機制尚未普遍的Web世界裡,當無法取得足夠資訊的前提下,常常會以畫面擷取(Screen Scraping)的方式進行異質系統之間的整合,雖然已經有些開放源碼的函式庫可以支援HTML元素的擷取(像Apache Jakarta專案中的HttpClient、OpenSymphony的SiteMesh等),但仍然會因為資料來源網頁的版面更新,造成需要經常修改 程式,實用性並不高。

服務導向概念興起,API水漲船高

慢慢地,服務整合SOA的呼聲水漲船高,加上每個軟體平臺大廠都奉SOA為至高無尚的圭臬時,不管是以結構嚴謹的SOAP,或是輕巧簡單的 REST(Representational State Transfer,代表性狀態傳輸)訊息結構方式,XML與HTTP已經是網際網路舞臺的閃亮主角。基於這兩種技術的簡單易用,加上跨平臺及幾乎所有開發 語言都能支援的特性,XML與HTTP迅速地被開發人員廣泛接受,利用它來實作服務整合的API介面,已經是十分普遍的現象。

這樣的應用不僅僅在企業之間的服務開始整合,某些知名的網路服務提供者也因為使用率的提升,也提供方便使用者進一步整合的API介面,讓大家可以依自己所需,將這些來自不同提供者的強大功能更密切地整合在一起,提供更無縫式的完美服務。

領先大廠投入網路服務API開發

本書以數個全球知名的網路服務為例,包括了耳熟能詳的Google、Amazon、 FedEx、eBay、PayPal、Flickr、Del.icio.us等,這些服務具有大量使用者。作者詳細說明如何使用這些Web APIs整合到自己的網路服務中,而實作的技術則是在網頁開發領域歷久不衰的PHP技術。

這些Web APIs具備了以下幾項共通的特點:

● 幾乎都提供多種不同的程式語言供開發者選擇,不在技術上有任何偏好及限制,符合開放標準的精神。

● 在使用前都必須申請授權碼,利用取得的授權碼呼叫API,使用上亦有所限制,避免有限的資源遭濫用。

● SOAP幾乎已經成了各家廠商必然提供的標準,只要是網路服務API,幾乎都會提供SOAP介面,有些甚至亦同時提供REST方式。

● 原則上相關的軟體套件都採用免費的方式提供給玩家們使用,當然你若需要應用在商業用途上,會有不同的授權方式。

閱讀重點放在如何自行設計,而非API的使用

參考了別人家的Web APIs怎麼用,重點在於如何為自己的網站服務規畫設計出專業的API。本書的第十二章便是筆者認為全書較具價值之處。這裡提到了以下的思考重點:

● 在不同實作技術下,針對資料安全性的考量是否完備?

● 評估選擇SOAP或REST方式實作時,其優劣之處及適用時機為何?

● 在效能提升上可以採取的改善及解決方法,以避免因為大量使用造成效能不彰。

● 必須重視API錯誤回應碼的分類及定義,讓前端能有效掌握系統狀態,提供更友善的訊息內容。

● 除了設計API,也需提供網路社群的相關資源,包括技術文件、討論區、相關套件下載等。

● 未來在API的版本控管及升級時,能提供不同版本之間的相容性。

全書篇幅不多,你可以跳著閱讀自己認為較有幫助的部份。幾近三分之二的章節都在介紹這些APIs如何使用,但筆者建議讀者閱讀的重點,是透過本書 對這些領先品牌服務平臺的整理,而不在於這些PHP程式碼應怎麼寫,思考這些APIs背後的設計方式及規格的定義,有助於未來規畫網路服務API時的參 考。

Follow

Get every new post delivered to your Inbox.