领先一步
VMware 提供培训和认证,助您加速进步。
了解更多举手示意:谁在使用 Facebook?有没有读者还在使用 Twitter?
我认识的几乎所有人都在使用 Facebook、Twitter、LinkedIn 或其他社交网络平台。事实上,我认识的大多数人都在多个社交网络平台上都有注册。根据最近的数据,Facebook 拥有超过 7.5 亿用户,Twitter 拥有超过 2 亿用户。就连我的母亲也注册了 Facebook。
好了,现在可以放下手了。
面对如此庞大的用户群体,很容易找到以业务为导向的动机来构建针对这些用户的应用程序。从更个人、更具个体化的角度来看,与社交网络服务合作也很有趣。开发出让您的朋友和家人能够识别、理解甚至使用的东西,会非常有成就感。除了“有趣”的因素之外,当你告诉别人你编写的程序可以针对这些平台时,还会有一种“哇”的感觉。当你提到“Facebook”或“Twitter”时,每个人——甚至我的母亲——都能至少理解你的应用程序的部分功能。
在过去的一年多里,我很幸运能够愉快地与 Facebook、Twitter 和其他类似服务合作。去年 5 月,Keith Donald、Roy Clarkson 和我开始探索构建社交和移动应用程序需要什么。这促使我们开发了 Greenhouse 参考应用程序,并从中提取了可重用组件,最终形成了 Spring Social、Spring Mobile 和 Spring Android 项目。
今天,我很高兴地宣布 Spring Social 1.0 正式发布,这是 Spring Framework 的一个扩展,它使应用程序能够代表用户连接到软件即服务 (SaaS) 提供商。既然 1.0 版本已经发布,我想花点时间回顾一下我们过去一年的工作,并重点介绍一些让我最兴奋的事情。
无论使用哪个版本的 OAuth,消费者应用程序都必须从提供商处获取访问令牌,并在每次向提供商的 API 发送请求时附带该令牌。但如何获取访问令牌以及如何使用它的具体细节因 OAuth 版本而异。
我认为编写处理 OAuth 版本和访问令牌的代码不是一个好的时间利用方式。这就是我们开发 Spring Social 的原因,以让您摆脱处理 OAuth 复杂性的困扰。Spring Social 的连接框架独树一帜,您只需用您应用程序的密钥和密码(在您向提供商注册应用程序时获得)进行配置,它就会处理其余的一切。您无需关心当前使用的是哪个 OAuth 版本,如何将访问令牌包含在请求中,或如何长期存储访问令牌。
一旦您的应用程序获得了服务提供商的授权,它就可以在用户授予的权限范围内访问提供商的 API。每个提供商都通过某种形式的 RESTful 服务暴露其平台,并且 API 中的资源大多都有很好的文档记录。因此,您可以使用 Spring 的 RestTemplate 从您的应用程序中消费这些资源。但您仍然需要确保每次请求都包含访问令牌。您还需要处理将提供商 API 返回的数据绑定到 Java 对象。并且,当出现问题时,您还需要处理 API 返回的任何错误。
但如果您使用的是 Spring Social,这些细节都会为您处理好。Spring Social 提供基于 Java 的 API,这些 API 绑定到服务提供商的 REST API。这不仅使您能够用 Java 的方式与提供商 API 进行交互,而且还可以确保每次对 REST API 的请求都带有访问令牌和签名。Spring Social 为 Facebook 和 Twitter 提供了完整的 API 绑定,并且已经开始为 LinkedIn、TripIt、GitHub 和 Gowalla 等其他提供商提供 API 绑定。
API 绑定还处理来自提供商 API 的错误消息。每个 API 绑定的底层都有一个错误处理器,它会将提供商的任何错误消息转换为有意义的异常,供您的应用程序代码捕获和处理。考虑到提供商 API 返回的错误可能很奇怪,错误处理尤其有价值。Facebook 的错误尤其令人费解,经常报告 OAuth 错误,而问题根本与 OAuth 无关。
例如,如果您的应用程序在向用户的 Facebook 墙发布消息时过于积极,Facebook 将在响应中返回以下 JSON 对象,并带有 HTTP 400 状态码
{"error":{"type":"OAuthException","message":"(#341) Feed action request limit reached"}}
HTTP 状态码和“type”字段对于了解出了什么问题都没有用。如果没有 Facebook 模块的错误处理器,您将不得不解析“message”字段来了解问题所在。但如果您使用的是 Spring Social 的 Facebook API 绑定,则会抛出 RateLimitExceededException。您可以向用户报告问题,记录它,或者干脆忽略它。但您不必直接处理来自 Facebook 的令人费解的错误。
令我一直印象深刻的 Spring Framework(以及所有 SpringSource 项目)的一点是,它的功能不仅仅局限于 JAR 文件中包含的内容。如果框架不能完全满足您的需求,您可以实现某个接口或扩展某个类,使其达到您的要求。秉承这种可扩展性的传统,Spring Social 提供了多种机会来定制和添加超出开箱即用功能的能力。
例如,在持久化连接数据方面,Spring Social 提供了一个基于 JDBC 的连接存储库实现。但如果开箱即用的实现不能满足您的需求,您可以编写自己的实现。看看 Spring Android 项目就知道 Spring Social 如何扩展以支持基于 SQLite 的连接持久化。
您可以通过另一种方式扩展 Spring Social,即 添加对新服务提供商的支持。您只需编写 API 绑定并配置连接支持即可。社区已经有很多项目正在扩展 Spring Social 以支持新的 SaaS 提供商。
说到 Spring Social 社区…
连接框架、API 绑定和可扩展性是 Spring Social 的强大功能,它们使您的 Spring 应用程序能够接入用户的朋友圈。但抛开功能不谈,Spring Social 要想成功,拥有一个强大的社区至关重要。因此,我尤其为围绕 Spring Social 项目形成了一个活跃且不断壮大的社区而感到自豪。
借助 Spring Social 的可扩展性,许多社区成员已经开发了扩展,包括…
除了这些代码贡献之外,我们现在已经有了 七个示例应用程序,每个应用程序都展示了不同的功能和用例。论坛上的讨论非常热烈,问题跟踪器中也有许多想法和错误报告。我想感谢所有参与者迄今为止的贡献。
在 Spring Social 1.0 发布之前的这一年令人兴奋,这次重大发布也有许多值得兴奋的地方。现在我们有了一个强大而稳定的基础,我期待着看到 Spring Social 今后的发展方向。我希望看到对 Twitter 和 Facebook API 绑定进行流式支持、用户管理功能、邀请系统、增强的 OAuth 提供商支持、更紧密的 Spring Security 集成,以及更多功能。您希望看到什么?
我希望您能像我们一样享受使用 Spring Social 的乐趣。请在评论中分享您对该框架的使用体验。我也邀请您参加我将于 9 月 29 日举办的网络研讨会(北美 | 欧洲),届时我将对 Spring Social 项目进行现场演示。希望届时能见到您!