
今天研究了一下如何在facebook上面寫application,寫篇文章紀錄一下。
我們在撰寫網頁應用程式的時候,通常需要的元件有:後台由伺服器端執行的網頁伺服器軟體(apache, tomcat...)、資料庫伺服器(MySQL...)、產生動態網頁的程式語言(php, asp, ruby...)以及前台由瀏覽器負責執行的腳本語言(javascript, actionscript...)。基本流程是後台的網頁程式與資料庫互動產生出網頁結果後丟到使用者端呈現出來。
而在facebook上的應用,雖然使用者感覺不出來,但在流程上卻有一點不同。主要的差異是,因為安全性的考量,由應用方所丟出的網頁在facebook又多處理了一次才到使用者瀏覽器上。也就是說,當使用者在facebook上打開一個應用時,facebook會嚮應用所在的伺服器要求指定的網頁內容,並將伺服器丟回到facebook的網頁做進一步的處理,處理完畢後再將最後的結果呈現給使用者。
瞭解了流程差異之後,我們來看看在撰寫應用方網頁的不同。(以FBML為主)
從前面我們知道由應用方伺服器送出的網頁檔案將在facebook再處理(也可以說是檢查)一次,由應用方送出的網頁檔案需要符合facebook處理的要求才能正確的呈現出來,而facebook有一系列的規範/工具,對應於原本我們所常用的工具,列出如下。
1.REST API
在facebook上撰寫應用程式的話,就是要提供服務給facebook上的使用者,因此我們需要一個介面來存取facebook上諸如使用者、朋友清單、群組、news/mini feeds種種資料。facebook提供的一組REST API給應用開發者,透過特定的HTTP Request就能夠進行資源(就是資料庫啦)的查詢、新增、刪除與修改。facebook也為各種語言,包括PHP寫了client api,透過操控物件就達到存取資源作用,不用自己去處理http request較細節的部分。值得一題的是,有個API test console,開發者可以在這邊測試自己下的request結果與欲期是否符合。
REST API相關資源:API wiki, API test console
2.HTML(HyperTextMarkupLanguage)<==>FBML(FaceBookMarkupLanguage)
網頁程式中,我們通常以HTML來處理應用程式的介面,而FBML就像是HTML一樣以標籤來組成文件。有許多HTML標籤可以在FBML正常使用但是也有一些標籤在FBML裡面是被禁止的。此外除了HTML的部分標籤以外,FBML還包含一組fb namespace的標籤,我們可以將這組標籤想成一組更複雜的HTML組合,只是facebook幫我們包再一起了。比方說
FBML相關資源:FBML wiki, FBML test console
3.FQL(Facebook Query Language)
用來撈facebook內部資料的查詢語言,結構跟SQL(structured query language)很類似。這個部分只有一些特別事項要注意,其他使用跟SQL一樣即可。需特別注意的列在下面。
a. 沒有 JOIN, LIMIT, ORDER BY, GROUP BY 可用
b. 有一些函式可以用,比方說rand(), concat()
FQL相關資源:FQL wiki,FQL Table Reference, API test console
4. FBJS(FaceBookJavaScript)
還沒操作過...目前看起來是覺得就是把javascript在封裝一層的感覺,類似一個小framework,有操作過了再來補。
今天寫完的範例是一個修改使用者狀態的小應用,接下來幾天來試試看加上自己應用端的資料庫的應用看看。
目前覺得不好上手的部分是FBML,有一堆東西要查來查去的,而且還要處理application在facebook不同的頁面的長相,但是還是很佩服facebook能搞出這platform,真的很厲害啊!
btw, 今天吃完晚餐想到的本土化東西是台灣立委大亂鬥,讓大家扮演立委收獻金綁樁腳打選戰,香港有古惑仔online我們有立委online XD
pic src:Global Warming myth strikes Facebook with feel good garbage.

