Spring Social 1.0:一年的成果

工程 | Craig Walls | 2011 年 9 月 8 日 | ...

举手示意:谁在使用 Facebook?有 Twitter 用户在阅读这篇文章吗?

我认识的几乎每个人都在使用 Facebook、Twitter、LinkedIn 或其他一些社交网络网站。事实上,我认识的大多数人都在多个社交网络网站上保持着存在感。根据最近公布的一些数据,Facebook 拥有超过 7.5 亿用户,Twitter 拥有超过 2 亿用户。甚至我妈妈也在使用 Facebook。

好了,现在可以放下手了。

拥有如此庞大的受众,很容易找到以业务为导向的动机来构建面向这些用户的应用程序。从更个人化、更个人的角度来看,与社交网络服务一起工作也很有趣。开发一些你的朋友和家人会认识、理解,甚至可能使用的产品,会很有成就感。除了“有趣”因素之外,当你告诉人们你编写面向这些平台的程序时,也存在“哇”因素。当你提到“Facebook”或“Twitter”时,每个人——甚至我妈妈——至少都能理解你的应用程序做的一些事情。

一年多来,我很幸运能够在 Facebook、Twitter 和其他类似服务上工作并获得很多乐趣。去年 5 月,Keith DonaldRoy Clarkson 和我开始探索构建社交和移动应用程序所需要的东西。这促使我们开发了 Greenhouse 参考应用程序,从中我们提取了可重用的组件,这些组件成为了 Spring SocialSpring MobileSpring Android 项目。

今天,我很高兴地宣布 Spring Social 1.0 发布,它是 Spring 框架的一个扩展,使应用程序能够代表其用户连接到软件即服务提供商。现在 1.0 已经发布,我想花点时间回顾一下我们在过去一年中所做的工作,并重点介绍一些我最兴奋的事情。

连接框架

几乎所有服务提供商都使用 OAuth 来保护其 API。但并非所有提供商都实现相同版本的 OAuth。OAuth 有三个版本(1.0、1.0a 和 2)。此外,OAuth 2 尚未最终确定,并且目前有 21 个规范草案,任何提供商都可能在其实现中使用这些草案。例如,Twitter 是一个 OAuth 1.0a 提供商,而 Facebook 实现了 OAuth 2-草案 12。

无论使用哪个版本的 OAuth,使用应用程序都必须从提供商处获取访问令牌,并将其与发送到提供商 API 的每个请求一起发送。但是,获取访问令牌和使用它的具体方法因 OAuth 的每个版本而异。

我认为编写处理 OAuth 版本和访问令牌的代码不是很好地利用你的时间。这就是我们开发 Spring Social 来让你免于处理 OAuth 复杂性的原因。Spring Social 的连接框架 的独特之处在于,你只需使用应用程序的密钥和密钥进行配置(在你向提供商注册应用程序时收到),它就会处理其余的事情。你不必关心使用的是哪个版本的 OAuth,如何在请求中发送访问令牌,或者如何长期存储访问令牌。

API 绑定

一旦你的应用程序已获得服务提供商的授权,它就可以使用用户授予的权限访问提供商的 API。每个提供商都通过某种形式的 RESTful 服务公开其平台,并且在大多数情况下,API 中的资源都记录得很详细。因此,你可以使用 Spring 的 RestTemplate 从你的应用程序中使用这些资源。但是你仍然需要确保每个请求都携带访问令牌。你还需要处理将从提供商 API 返回的数据绑定到 Java 对象。而且,当事情出现问题时,你还需要处理 API 返回的任何错误。

但是,如果你使用的是 Spring Social,这些细节就会为你处理。Spring Social 提供绑定到服务提供商 REST API 的基于 Java 的 API。这不仅使你能够用 Java 术语与提供商 API 交互,而且还确保每个对 REST API 的请求都携带访问令牌和签名。Spring Social 为 FacebookTwitter 提供完整的 API 绑定,并且还为其他提供商(如 LinkedInTripItGitHubGowalla)启动了 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 框架(以及所有其他 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 项目进行现场演示。我希望在那里见到你!

获取 Spring 电子报

通过 Spring 电子报保持联系

订阅

领先一步

VMware 提供培训和认证,以加速你的进步。

了解更多

获取支持

Tanzu Spring 在一个简单的订阅中提供对 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将举行的活动

查看 Spring 社区中所有即将举行的活动。

查看全部