正計劃著要開始搞一個新的網絡應用?在這篇教程中,我們將討論如何創建以API為中心的網絡應用,還會解釋在今天的多平台世界,這類應用為什麼是重要的。
引言
API?
對於還不甚熟悉這個術語的朋友,API是Application Programming Interface應用編程接口)的簡稱。根據維基百科:
API是以源代碼為基礎的約定,它用於軟件組件之間相互通信的接口。API可能包含函數、數據結構、對象類、以及變量等的約定。
API可視化
圖片蒙惠http://blog.zoho.com
簡單地講,API指的是一組應用中的函數,它們能夠被其它應用或者這些函數所屬應用自己,下文中我們將會看到)用來與應用進行交互。API是一種很棒的向外部應用安全和妥善地表明其功能的方式,因為這些外部應用所能利用的所有功能僅限於API中所表現出的功能。
什麼是“以API為中心的”網絡應用?
以API為中心的網絡應用就是基本上通過API調用執行大多數甚或所有功能的一類網絡應用。
以API為中心的網絡應用就是基本上通過API調用執行大多數甚或所有功能的一類網絡應用。舉個例子,如果你正要登錄一個用戶,你應當將其認證信息發送給API,然後API會向你返回一個結果,說明該用戶是否提供了正確的用戶名-密碼組合。
以API為中心的網絡應用的另外一個特征就是API一直是無狀態的,這意味著這種應用無法辨別由會話發起的API調用。由於API調用通常由後端代碼構成,實現對會話的掌控將比較困難,因為這其中通常沒有cookies介入。這種局限事實上是好事——它“迫使”開發者建造不基於當前用戶狀態工作的 API,但是相應地在功能上,它使測試易於進行,因為用戶的當前狀態無需被重建。
為什麼要經歷這些麻煩?
作為Web開發者,我們已經親眼目睹了技術的進步。有一個常識是,當代的人們不會只通過浏覽器來使用應用,還會通過其它諸如移動電話和平板電腦之類的設備使用。舉個例子,這篇發表在Mashable上的名為“用戶在移動應用上花的時間比在網絡上的多”的寫道:
一項新近的報告表明,用戶花在移動應用上的時間首次超過了花在網絡上的時間。
Flurry對比了其移動數據與來自comScore和Alexa的統計數據,發現在六月,用戶每天花費81分鐘使用移動應用,而只花74分鐘用於網上沖浪。
這裡還有一篇來自ReadWriteWeb的更新的文章“在移動設備上浏覽網絡的人多於使用IE6和IE7的人數總和”:
來自Sitepoint的 浏覽器趨勢的最新數據表明,在智能手機上浏覽Web的人比使用IE6和IE7浏覽的人更多。這兩件難有起色的老古董多年來一直是Web開發者的噩夢,它們需要各網站盡可能妥當地降格到至少常用浏覽器所能支持的水平。但是現在時代不同了;2011年十一月中,6.95%的Web活動在移動浏覽器上發生,而發生在IE6或 IE7上的則只有6.49%。
正如我們所見,越來越多的人正通過其它途徑獲得訊息,特別是移動設備。
這與我創建以API為中心的網絡應用有何關系?
這必將會使我們的應用更加有用,因為它可以用在任何你需要的地方。
創建以API為中心的網絡應用的主要優勢之一便是它幫助你建立可以用於任何設備的功能,浏覽器、移動電話、甚至是桌面應用。你所需要做的就是創建的API 能夠使所有這些設備利用它完成通信,然後,瞧!你將能夠建造一個集中式應用,它能夠接受來自用戶所使用的任何設備的輸入並執行相應的功能。
以API為中心的應用的框圖
通過以這種方式創建應用,我們能夠從容地利用不同的人使用不同的媒介這一優勢。這必將使應用更加有用,因為它能用在用戶需要的任何地方。
為了證明我們的觀點,這裡有一篇關於Twitter的重新設計的網站的文章,文章告訴我們他們現在如何利用他們的API來驅動Twitter.com的,實質上是使其以API為中心:
最重要的架構改動之一就是Twitter.com現在是我們自己API的客戶。它從終端提取數據,此終端與移動網站,我們為iPhone、iPad、 Android,以及所有第三方應用所用端點相同。這一轉變使我們能向API團隊分配更多的資源,同時生成了40多個補丁。在初始頁面負載和來自客戶端的每個調用上,所有的數據現在都是從一個高度優化的JSON段緩存中獲取的。
在本篇教程中,我們將創建一個簡單的TODO列表應用,該應用以API為中心;還要創建一個浏覽器上的前端客戶端,該客戶端與我們的TODO列表應用進行交互。文末,你就能了解一個以API為中心的應用的有機組成部分,同時,還能了解怎樣使應用和客戶端兩者之間的安全通信變得容易。記住這些,我們開始吧!
步驟 1: 規劃該應用的功能
本教程中我們將要構建的這個 TODO 應用將會有下面幾個基本的CRUD功能:
每一個 TODO 條目將擁有:
讓我們模擬一下該應用,使我們考慮該應用以後會是什麼樣子時,能有有一個直觀的參考:
簡單的TODO 模擬示例