`
liwanchun_xd
  • 浏览: 124259 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论
阅读更多
转载:http://xiecc.blog.163.com/blog/static/14032200791635949331/

全球第二大社交网站的facebook推出的开发平台在几个月之内迅速走红。在拒绝了 yahoo,google等的收购后,它的狼子野心也暴露无遗,它要做基于web的OS,在它的开放发台上可以搭建集成任何应用。游戏、工作、理财一切都在facebook中了,浏览器+facebook,会成为以后人们的生活方式吗?

然而不得不说facebook的官方文档既乱且差, 很多刚开发facebook应用的人可能都会丈二和尚摸不着头脑。这篇日志算是八卦+tutorial吧。



一、facebook简介

这段纯属废话,给那些不解facebook, 又不愿意点链接的人看。

Facebook发源于哈佛大学,是目前社会化网络和web2.0的风向标。这个网站目前全球排名第8位,估值可能超过100亿美元。而Facebook开放平台的推出,更是让互联网业内认为它是最有可能和Google比肩的公司。 Facebook创建于2004年2月。这样的高速增长和短短三年多取得的成就,成为当今互联网发展的一个奇迹。



(Facebook创始人兼CEO Mark Zuckerberg)



这里的介绍更详细:

http://www.yeeyan.com/articles/view/thunder/2346



二、facebook platform

2007年5月24日,Facebook推出应用编程接口(API)。通过这个API,第三方软件开发者可以开发在Facebook网站运行的应用程序。这被称为Facebook开放平台(Facebook Platform)。

没有什么比facebook创始人mark Zackerberg的总结更好了:

"We want to make Facebook into something of an operating system so you can run full applications," Zuckerberg told me, saying it would be analogous to the platform that Microsoft Windows provides for developers.

去 http://www.facebook.com/apps/ 看看吧, 那里的应用真是应用尽有。

读写网总结的top 10 facebook apps也相当的棒:

http://www.readwriteweb.com/archives/top_10_facebook_apps_work.php

http://www.readwriteweb.com/archives/top_10_facebook_apps_play.php



三、facebook 应用概述

1、平台开发环境

Facebook的开发环境是LAMP, 这套传统的linux+apache+mysql+php的架构尽管被很多java程序员和ruby程序员所不屑,但它却仍然以绝对的优势占据着主导地位。

不过这对java程序员来说确实有点痛苦,因为facebook官方包装的java client相当的差,更关键的是它没有提供任何java开发web应用的例子和文档。幸亏还有一些非官方的tutorial。地址附在后面。



2、应用集成

谈到应用集成, 我们首先想到的是web services 和SOA,这些被工业界吹了那么多年的buzzword终于得到了推广,然而值得讽刺的是最后web services的推广形式不是他们花了那么多年想出来的SOAP标准,而是最简单又不用任何标准的REST,facebook正是提供了一堆REST的 Web services(从严格意义上说facebook的所有service都是POST过去的,URL也没有完全遵守REST)。

然而这个层面的集成显然不能满足facebook作为web OS的需要,facebook需要让application运行在它提供的平台上。看看操作系统的需要就能想象到facebook的web OS应用提供怎么的集成。

在windows上我们需要安装应用软件,facebook提供了完整的搜索、浏览、添加application的方式。

在windows上我们利用各种快捷方式让应用运行在自己的平台里,facebook提供了运行应用的简单入口,而所有的应用都是在facebook内部展示的。

记得前几天看到的一篇文章将应用集成分为三个层面:

1 基于web services和SOA的应用程序交互

2 平台运行在内部服务器上,而各种应用运行在外部服务器上,这正是facebook的方式

3 平台和应用都运行在内部服务器上

但是不知道他有没有想过第三种集成方式的扩展性和伸缩性是多么贫乏,我相信facebook的集成方式才是最好的方式。

Facebook的这篇官方文档解剖了facebook应用集成到平台后的各个界面展示:

http://developers.facebook.com/anatomy.php



四、facebook应用种类

Facebook提供了三类的应用:

External application

Iframe         

fbml

1、 external application没什么好说的,就是基于web services的集成,外部应用在经过facebook的认证后可以调用facebook提供的一些web services。

2、 Iframe的集成也相当简单,只是在facebook平台的应用页面上放了个iframe, iframe里跑的是应用程序的应用。好象facebook里的最火的应用之一top friends是用iframe做的。但是由于iframe的天生限制,使它无法完全集成facebook平台提供的功能,如fbml,在页面的显示上也有些怪。

3、目前应用用的最多还是fbml。因为在fbml的应用中,facebook平台的页面(下图所示的菜单部分)和应用程序的页面(如下图黄色部分)是无缝显示的,看上去完全象是一个应用做的事。想象成OS的话,外部的菜单栏更象是windows提供的桌面和开始菜单,黄色区域则是应用程序。





在fbml应用中,facebook平台主要起着中间人的作用,如下图所示,



所有的用户对facebook平台的请求都被转到了应用的url(在application 里可以配callback url),只不过是把所有的请求变为post, 同时加上认证必需的一些参数。最后返回的html显示在facebook的application区的canvas里。

但是这个中间人的角色并不象想象中的那么简单, 它至少会引起以下问题:

1、httpsession信息丢失,基本上现在的httpsession都依赖于cookie中的jsessionid,但是经过中间人(facebook服务器)后,cookie的信息是无法获取,也意味着httpsession是无法保存信息的。因此所有的用户相关的信息都是加在中转后的reqeust参数里的,从request里的userId 和sessionKey应用程序可以重建出用户的所有信息。 不过这倒反而实现了应用的share nothing architectue,对系统的scalability是有好处的。

2、外部css丢失,由于中转的时候只去request callback url里的页面,所有外部的css内容都是干掉的,应用程序只能在html文件里定义css,这对于css狂们真是灾难。

3、js丢失,facebook会把页面中所有的js给滤掉,而取而代之用自己设计的有限的安全的js语言,这很重要的一部分原因是安全性。但对于ajax狂来说这又是灾难。



五、facebook的authentication

Facebook的认证过程其实不复杂, 但是如果java程序捧着官方提供的java包捣腾,恐怕还要费些功夫,官方那个只提供了桌面应用的认

证程序,而web应用的认证过程则大厢径庭。

应用程序在注册时会获得该应用的api_key和secret,这实际上是访问该应用的用户名和密码了,只有开发人员可以看到。事实上以后的每次调用facebook api都会带上这api_key,但这显然还不够,登录用户必须拥自己特定的信息:sessionKey,每次调用带上这个key才能将用户的信息关联(类似于tomcat的jsessionid),因此认证的主要目的就是拿到sessionKey。



上图是外部web应用的认证过程,这种应用只通过web services与facebook集成,这种应用唯一要做的是获得取得调用web services的权限,上图的流程很清楚了。如果用java开发,一般先用一个filter或其它interceptor拦截,如果发现没有登录 facebook应用自动导到facebook的login页面(在request的参数里将登录完后回来的页面传进去),登录后跳回到原来的页面,就可以在filter中通过request里的authtoken获取sessionKey了,这种应用一般将认证后的sessionKey放到HttpSession就可以了(以后不用重复认证)。





上图是fbml应用的认证过程,事实上内部应用的authentication远比外部应用简单,但是官方竟然没提供文档。由于facebook的用户必须登录才能使用,实际上在使用 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显示了一个用户头像:

<td><fb:profile-pic uid="${friendId}" linked="true" /></td>



八、开发环境                      

开发外部的facebook应用和iframe的facebook应用不需要任何的特殊配置,但是开发fbml的facebook应用却是另一回事了。从第四节的facebook as middleman的图中我们可以看到facebook服务器要读到应用的页面塞到facebook的canvas里。这意味着应用的页面必须是外网可以直接访问才能看到效果。

而我们的开发平台却是搭在本地的, 难道只有部署到服务器上才能看到页面效果?这对开发调是一个严重的挑战。

后悔我当初没有看到这篇blog, 利用SSH的reverse tunnel功能可以将外网的地址按端口号tunnel到本地的开发环境。

http://blog.evanweaver.com/articles/2007/07/13/developing-a-facebook-app-locally



我采用另一种方法:增加middleman,facebook本身起了一个中间人的作用,将facebook的请示导到了应用的请求,为什么我们不可以再增加一个中间人, 把外网的请求导到内网?

幸好一个几十行的ruby on rails程序就可以搞定route的功能。

这样实现后的配置也很简单,只要将callback url里的参数映射到本地机器就可以实现多人的同时开发:

    urlMap={

       cc=>'http://192.168.80.156/facebook/',

        :skt=>'http://192.168.80.133/facebook/'

    }





附  facebook平台开发的非官方tutorial:



Ruby的:

http://www.liverail.net/articles/2007/6/29/tutorial-on-developing-a-facebook-platform-application-with-ruby-on-rails

http://giantrobots.thoughtbot.com/2007/6/14/fist-in-your-facebook





java的:

http://javablog.co.uk/2007/07/25/tips-for-writing-facebook-applications-in-java



http://tmachine1.dh.bytemark.co.uk/blog/index.php/2007/08/02/how-to-make-facebook-apps-using-java-part-1/



http://tmachine1.dh.bytemark.co.uk/blog/index.php/2007/08/13/how-to-make-facebook-apps-using-java-part-2/



http://tmachine1.dh.bytemark.co.uk/blog/index.php/2007/09/21/ten-tips-and-tricks-for-writing-facebook-apps/
分享到:
评论

相关推荐

    养老院管理系统:SpringBoot与Vue前后端不分离架构的设计与实现

    内容概要:本文详细介绍了基于SpringBoot和Vue开发的养老院管理系统的具体实现细节。该系统采用前后端不分离的架构,旨在快速迭代并满足中小项目的开发需求。文中涵盖了多个关键技术点,如数据库设计(组合唯一约束、触发器)、定时任务(@Scheduled、@Async)、前端数据绑定(Vue的条件渲染和动态class绑定)、权限控制(RBAC模型、自定义注解)以及报表导出(SXSSFWorkbook流式导出)。此外,还讨论了开发过程中遇到的一些常见问题及其解决方案,如CSRF防护、静态资源配置、表单提交冲突等。 适合人群:具备一定Java和前端开发经验的研发人员,尤其是对SpringBoot和Vue有一定了解的开发者。 使用场景及目标:适用于需要快速开发中小型管理系统的团队,帮助他们理解如何利用SpringBoot和Vue进行全栈开发,掌握前后端不分离架构的优势和注意事项。 其他说明:文章不仅提供了详细的代码示例和技术要点,还分享了许多实用的小技巧和避坑指南,有助于提高开发效率和系统稳定性。

    家族企业如何应对人才流失问题?.doc

    家族企业如何应对人才流失问题?

    员工关怀制度.doc

    员工关怀制度.doc

    路径规划领域中基于排序搜索的蚁群算法优化及其应用

    内容概要:本文详细探讨了对传统蚁群算法进行改进的方法,特别是在路径规划领域的应用。主要改进措施包括:采用排序搜索机制,即在每轮迭代后对所有路径按长度排序并只强化前20%的优质路径;调整信息素更新规则,如引入动态蒸发系数和分级强化策略;优化路径选择策略,增加排序权重因子;以及实现动态地图调整,使算法能够快速适应环境变化。实验结果显示,改进后的算法在收敛速度上有显著提升,在复杂地形中的表现更加稳健。 适合人群:从事路径规划研究的技术人员、算法工程师、科研工作者。 使用场景及目标:适用于需要高效路径规划的应用场景,如物流配送、机器人导航、自动驾驶等领域。目标是提高路径规划的效率和准确性,减少不必要的迂回路径,确保在动态环境中快速响应变化。 其他说明:改进后的蚁群算法不仅提高了收敛速度,还增强了对复杂环境的适应能力。建议在实际应用中结合可视化工具进行调参,以便更好地观察和优化蚂蚁的探索轨迹。此外,还需注意避免过度依赖排序机制而导致的过拟合问题。

    基于PSO算法的配电网分布式光伏选址定容优化及其Matlab实现

    内容概要:本文详细介绍了利用粒子群优化(PSO)算法解决配电网中分布式光伏系统的选址与定容问题的方法。首先阐述了问题背景,即在复杂的配电网环境中选择合适的光伏安装位置和确定合理的装机容量,以降低网损、减小电压偏差并提高光伏消纳效率。接着展示了具体的PSO算法实现流程,包括粒子初始化、适应度函数构建、粒子位置更新规则以及越界处理机制等关键技术细节。文中还讨论了目标函数的设计思路,将多个相互制约的目标如网损、电压偏差和光伏消纳通过加权方式整合为单一评价标准。此外,作者分享了一些实践经验,例如采用前推回代法进行快速潮流计算,针对特定应用场景调整权重系数,以及引入随机波动模型模拟光伏出力特性。最终实验结果显示,经过优化后的方案能够显著提升系统的整体性能。 适用人群:从事电力系统规划与设计的专业人士,尤其是那些需要处理分布式能源集成问题的研究人员和技术人员。 使用场景及目标:适用于希望深入了解如何运用智能优化算法解决实际工程难题的人士;旨在帮助读者掌握PSO算法的具体应用方法,从而更好地应对配电网中分布式光伏系统的选址定容挑战。 其他说明:文中提供了完整的Matlab源代码片段,便于读者理解和复现研究结果;同时也提到了一些潜在改进方向,鼓励进一步探索和创新。

    Prius2004永磁同步电机设计:从Excel到MotorCAD的全流程解析与实战技巧

    内容概要:本文详细介绍了丰田Prius2004永磁同步电机的设计流程,涵盖从初始参数计算到最终温升仿真的各个环节。首先利用Excel进行基本参数计算,如铁芯叠厚、定子外径等,确保设计符合预期性能。接着使用Maxwell进行参数化仿真,通过Python脚本自动化调整磁钢尺寸和其他关键参数,优化电机性能并减少齿槽转矩。随后借助橡树岭实验室提供的实测数据验证仿真结果,确保模型准确性。最后采用MotorCAD进行温升仿真,优化冷却系统设计,确保电机运行安全可靠。文中还分享了许多实用技巧,如如何正确设置材料参数、避免常见的仿真错误等。 适合人群:从事电机设计的专业工程师和技术人员,尤其是对永磁同步电机设计感兴趣的读者。 使用场景及目标:适用于希望深入了解永磁同步电机设计全过程的技术人员,帮助他们在实际工作中提高设计效率和精度,解决常见问题,优化设计方案。 其他说明:文章提供了丰富的实战经验和具体的操作步骤,强调了理论与实践相结合的重要性。同时提醒读者注意一些容易忽视的细节,如材料参数的选择和仿真模型的准确性。

    基于DSP28335的单相逆变器设计方案与实现:涵盖ADC采样、PWM控制、锁相环及保护机制

    内容概要:本文详细介绍了基于DSP28335的单相逆变器的设计与实现,涵盖了多个关键技术模块。首先,ADC采样模块用于获取输入电压和电流的数据,确保后续控制的准确性。接着,PWM控制模块负责生成精确的脉宽调制信号,控制逆变器的工作状态。液晶显示模块则用于实时展示电压、电流等重要参数。单相锁相环电路实现了电网电压的频率和相位同步,确保逆变器输出的稳定性。最后,电路保护程序提供了过流保护等功能,保障系统的安全性。每个模块都有详细的代码示例和技术要点解析。 适合人群:具备一定嵌入式系统和电力电子基础知识的研发人员,尤其是对DSP28335感兴趣的工程师。 使用场景及目标:适用于单相逆变器项目的开发,帮助开发者理解和掌握各个模块的具体实现方法,提高系统的可靠性和性能。 其他说明:文中不仅提供了具体的代码实现,还分享了许多调试经验和常见问题的解决方案,有助于读者更好地理解和应用相关技术。

    SecureCRT安装包

    SecureCRT安装包

    C# WPF MVVM架构下的大屏看板3D可视化开发指南

    内容概要:本文详细介绍了如何利用C#、WPF和MVVM模式构建一个大屏看板3D可视化系统。主要内容涵盖WPF编程设计、自定义工业控件、数据库设计、MVVM架构应用以及典型的三层架构设计。文中不仅提供了具体的代码实例,还讨论了数据库连接配置、3D模型绑定、依赖属性注册等关键技术细节。此外,文章强调了项目开发过程中需要注意的问题,如3D坐标系换算、MVVM中命令传递、数据库连接字符串加密等。 适合人群:具备一定C#编程基础,对WPF和MVVM模式有一定了解的研发人员。 使用场景及目标:适用于希望深入了解WPF和MVVM模式在实际项目中应用的开发者,特别是那些从事工业控制系统、数据可视化平台开发的专业人士。通过学习本文,读者可以掌握如何构建高效、稳定的大屏看板3D可视化系统。 其他说明:本文提供的设计方案和技术实现方式,可以帮助开发者更好地理解和应用WPF和MVVM模式,同时也能为相关领域的项目开发提供有价值的参考。

    基于java SSM 框架的酒店管理系统.zip

    基于ssm的系统设计,包含sql文件(Spring+SpringMVC+MyBatis)

    非厄米超表面双参数传感器的COMSOL建模与应用

    内容概要:本文详细介绍了利用COMSOL进行非厄米超表面双参数传感器的设计与实现。首先,通过构建超表面单元并引入虚部折射率,实现了PT对称系统的增益-损耗交替分布。接着,通过频域扫描和参数化扫描,捕捉到了复频率空间中的能级劈裂现象,并找到了奇异点(Exceptional Point),从而显著提高了传感器对微小扰动的敏感度。此外,文章探讨了双参数检测的独特优势,如解耦温度和折射率变化的能力,并展示了其在病毒检测、工业流程监控等领域的潜在应用。 适合人群:从事光学传感器研究的专业人士,尤其是对非厄米系统和COMSOL仿真感兴趣的科研人员。 使用场景及目标:适用于需要高精度、多参数检测的应用场合,如生物医学检测、环境监测等。目标是提高传感器的灵敏度和分辨率,解决传统传感器中存在的参数交叉敏感问题。 其他说明:文中提供了详细的建模步骤和代码片段,帮助读者理解和重现实验结果。同时,强调了在建模过程中需要注意的关键技术和常见问题,如网格划分、参数设置等。

    怎样健全员工福利体系.docx

    怎样健全员工福利体系.docx

    离职证明范本.doc

    离职证明范本.doc

    6538b79724855900a9c930904a302920.part6

    6538b79724855900a9c930904a302920.part6

    员工离职单.doc

    员工离职单.doc

    COMSOL中超材料异常折射仿真的关键技术与实现

    内容概要:本文详细介绍了在COMSOL中进行超材料异常折射仿真的关键技术。首先解释了异常折射现象及其产生的原因,接着通过具体代码展示了如何利用相位梯度和结构色散精确计算折射角。文中还讨论了边界条件的设置、网格划分的优化以及参数化扫描的应用。此外,提供了多个实用脚本和技巧,帮助提高仿真的精度和效率。最后强调了验证结果的重要性和一些常见的注意事项。 适合人群:从事电磁仿真研究的专业人士,尤其是对超材料和异常折射感兴趣的科研人员和技术开发者。 使用场景及目标:适用于需要深入理解和解决超材料中异常折射问题的研究项目。主要目标是掌握COMSOL中异常折射仿真的完整流程,确保仿真结果的准确性并优化计算性能。 其他说明:文章不仅提供了详细的代码示例和技术细节,还分享了许多实践经验,有助于读者更好地应对实际仿真过程中可能出现的问题。

    招聘工作数据分析表.xls

    招聘工作数据分析表.xls

    platform-tools-latest-windows.zip

    platform-tools-latest-windows.zip

    个人资料临时存储QT资源

    个人资料临时存储QT资源

    微电网三相交流下垂控制技术详解:传统阻感型输出有功、无功及频率波形分析

    内容概要:本文详细介绍了微电网中三相交流下垂控制的工作原理和技术细节。首先,通过Matlab/Simulink搭建模型,展示了传统阻感型线路下垂特性的实现方法,特别是有功-频率和无功-电压下垂曲线的解析。文中强调了关键参数Kp和Kq的选择及其对系统稳定性的影响,并通过具体的仿真案例展示了不同参数设置下的动态响应。此外,文章讨论了波形分析中的注意事项,如谐波成分、滤波器设计以及虚拟阻抗的应用。最后,通过Python和C语言实现了下垂控制器的代码示例,进一步解释了实际工程中的实现细节。 适合人群:从事微电网研究和开发的技术人员,尤其是对下垂控制感兴趣的电气工程师和研究人员。 使用场景及目标:适用于希望深入了解微电网下垂控制原理及其实际应用的研究人员和技术人员。目标是帮助读者掌握下垂控制的核心概念和技术实现,提高在实际工程项目中的调试和优化能力。 其他说明:文章不仅提供了理论分析,还包括了大量的仿真代码和波形图,使读者能够更好地理解和验证所学内容。同时,文中提到的实际调试经验和常见错误也为初学者提供了宝贵的指导。

Global site tag (gtag.js) - Google Analytics