登录才能使用,实际上在使用 facebook应用时用户已经登录并拥有了sessionKey和user_id等参数,因此在中间人(facebook server)中转到应用的url时,它在request里会把sessionKey和userId等参数传进去,因此在拿到这些参数后客户端可以直接进行任何web services的调用。
六、facebook api (RESTful web services)
Facebook提供了一堆的api,有认证、用户、相册、好友等功能,从使用的角度来说这倒并不存在什么难点。本身REST的api就是一个httpRequest请求过
去返回一个xml的response。经过了官方或非官方的包装以后就变成一个简单的方法调用。
1、所有的api调用都是无状态的,这也是facebook拥有这么好的 scalability的重要原因。每个request里都会带上api_key, session_key, call_id, sig等参数,这保证了安全性的同时也保证了scalbility。
2、java的客户端调用包比起ruby来实在是恶心多了。这个时候动态语言的优势体现得太明显了。利用ruby的method missing功能,一个简单的实现就可以调用facebook的所有api了,而且扩展性好。Java的包里则定义了一堆恶心方法,而且返回的是一个 xml document, 经过一堆的解析才能取到结果。
七、fql与fbml
Fql就是 facebook版的sql,从使用的角度来说fql的其实挺简单,它只是sql的一个子集, 只支持单表查询,where条件必须是索引过的字段,支持子查询, 还支持一些sql的函数。最简单的例子:
SELECT name, pic FROM user WHERE uid=211031 OR uid=4801660
Fbml是 facebook提供的一堆tag,它只能在fbml的应用程序中使用。从使用的角度来说也很简单,以下html显示了一个用户头像:
| 八、开发环境
开发外部的facebook应用和iframe的facebook应用不需要任何的特殊配置,但是开发fbml的facebook应用却是另一回事了。从第四节的facebook as middleman的图中我们可以看到facebook服务器要读到应用的页面塞到facebook的canvas里。这意味着应用的页面必须是外网可以直接访问才能看到效果。
而我们的开发平台却是搭在本地的, 难道只有部署到服务器上才能看到页面效果?这对开发调是一个严重的挑战。
后悔我当初没有看到这篇blog, 利用SSH的reverse tunnel功能可以将外网的地址按端口号tunnel到本地的开发环境。
blog.evanweaver/articles/2007/07/13/developing-a-facebook-app-locally
我采用另一种方法:增加middleman,facebook本身起了一个中间人的作用,将facebook的请示导到了应用的请求,为什么我们不可以再增加一个中间人, 把外网的请求导到内网?
幸好一个几十行的ruby on rails程序就可以搞定route的功能。
这样实现后的配置也很简单,只要将callback url里的参数映射到本地机器就可以实现多人的同时开发:
urlMap={
[点击图片可在新窗口打开] cc=>'192.168.80.156/facebook/',
:skt=>'192.168.80.133/facebook/'
}
附 facebook平台开发的非官方tutorial:
Ruby 的:
liverail.net/articles/2007/6/29/tutorial-on-developing-a-facebook-platform-application-with-ruby-on-rails
giantrobots.thoughtbot/2007/6/14/fist-in-your-facebook
java的:
jav
ablog.co.uk/2007/07/25/tips-for-writing-facebook-applications-in-java
tmachine1.dh.bytemark.co.uk/blog/index.php/2007/08/02/how-to-make-facebook-apps-using-java-part-1/
tmachine1.dh.bytemark.co.uk
上一篇:
Eclipse搭建Ruby开发环境_Ruby代码
下一篇:
邓小平精简机构理论探析