使用SaaS鉴权用户,以加快应用开发

来源:互联网 发布:手机跑分用什么软件 编辑:程序博客网 时间:2024/05/17 07:49

 新一代的云服务不再要求应用开发者编写服务器端代码。几乎所有的应用都依赖服务器端的业务逻辑,回调为App 提供服务的API。应用依赖服务器来分析,存储数据,通讯,并与现有系统集成。虽然通用服务如分析一般都外包给专业服务商,许多开发者还是需要编写服务器端代码来支持他们应用的功能,特别是你编译要与后端系统集成的企业级应用时。把配置和业务逻辑放到服务器端是个好办法,这样你可以很快更新内容和业务规则。

 

        对那些已经拥抱云服务的企业来说,有另一个选择。有新兴的服务提供商涌现出来,使应用开发者更容易开发。你可以外包你的业务逻辑的基本功能给云服务商。设想一下提供服务的任何一个应用的基本架构---你需要用户标识,以识别他们是谁,如何登陆,他们能做什么。你会有数据在设备和云间同步。你有内容要更新。你要集成社交媒体,你要支持通知,能和用户交流。也许你还要支持应用内支付。还需要提供位置服务如地址检索等。当然还要传输内容(这使得你的应用初次下载包很小)。

 

        你可以自己编写上述大部分代码。创建一个传统的N层架构,配置数据库,负载调优。写部署脚本,调度备份,单元测试,加班,当服务器宕机时周末凌晨4点接电话。。。

 

        Infrastructure-as-a-Service 供应商如Amazon, Rackspace和Joyent 会为你省去这部分工作。Platform-as-a-Service供应商如Heroku 能更加节省你的工作。但我们要问 - 你还要写代码吗? 你的业务逻辑能有多少能被Software-as-a-Service 交付?

 

        我们把用户id鉴别问题做一个例子。你可以比较下多种的API。 尽管社交媒体账号登陆如Facebook, Twitter 或 LinkedIn可以很快解决这个问题,也有可用的SDK,如果你要与用户建立更深的关系,这不是一个令人满意的解决方案。你需要自己的用户数据库。所以你要写自己的服务器端代码,支持自己的验证机制,当然也要经历支持OAuth 协议的折磨。为你的应用写新的功能,你要考虑你的密码的合理存放位置,实现密码提示页面等。我们看看外包的用户识别网站parse.com, stackmob.com, 或 kinvey.com是如何工作的。

 

         要使用parse.com 服务,你需要先在  parse.com 上注册,并安装他们的Android SDK。用户识别函数由 ParseUser对象提供。 

 

ParseUser user = new ParseUser();user.setUsername("my name");user.setPassword("my pass");user.setEmail("email@example.com");

 

                    ( parse.com 上的样例代码)

 

        要注册一个新用户,调用signUpInBackground  函数:

user.signUpInBackground(new SignUpCallback() {  public void done(ParseException e) { … }}

 

        用户登录,调用 logInInBackground 函数:

 

ParseUser.logInInBackground("Jerry", "showmethemoney", new LogInCallback() {  public void done(ParseUser user, ParseException e) { … }}

 

         如你所见,API使用匿名的内嵌类作为回调,很像node.js.的风格。你要维护自己的用户界面,这不是parse.com能做的工作。但 parse.com 可以维护邮件验证,密码提醒,登录缓存,用户授权,提供管理控制台来管理用户数据。你不需要自己实现这些功能。

 

        要把保存在parse.com 的用户数据与现有 系统集成,你需要调用它的 REST API。这个API允许你通过HTTP对数据调用所有API。这个API非常关键,能避免锁住,你应当向你所使用的云服务提供商查询是否提供该功能。

 

       云供应商是要挣钱的。你应当比较他们的定价。parse.com 对低用户量免费,当然如果你的应用很受欢迎,你最好还是要购买他们的服务。

 

       stackmob.com 和parse.com的服务类似。 stackmob API 更接近底层的REST API。

 

final String username = "johndoe";final String password = "mypassword";Map<String, String> args = new HashMap<String, String>();args.put("username", username);args.put("password", password); StackMobCommon.getStackMobInstance().login(args, new StackMobCallback() {  @Override public void success(String responseBody) {    //handle success here  }  @Override public void failure(StackMobException e) {    //handle failure here  }});

 

                     (stackmob.com 的样例代码)

 

        同样也有匿名内嵌类回调模式。这是因为这些供应商支持Java, Objective-C, 和 JavaScript 等版本的API。为使结构类似,他们都异步工作,并使用回调来告诉你的代码调用结束。

 

        使用parse.com你要自己维护用户界面。而stackmob 服务给你REST API 来集成,如果用户量不大,你可以免费使用。

 

        kinvey.com 服务提供类似的用户管理功能。下面是他们的API:

 

 

KinveySettings = KinveySettings.loadFromProperties(getApplicationContext());sharedClient = KCSClient.getInstance(getApplicationContext(), settings); KinveyUser user = service.loginWithUsername("existinguser", "pass");

 

                       ( kinvey.com 的样例代码)

 

       kinvey.com 服务也模拟 JavaScript回调函数,但提供一个更自然的Java风格的公用功能层。你也会得到一个 REST API 和免费使用的用户量。

 

       你考虑使用哪个服务?每个服务都提供相似的功能 -- 没有多种不同方式来提供用户识别或数据存储层  -- 所以API 的结构也相似。如果这些服务都是有效的商品,也许价格是决定因素。

 

       然而,还有一个因素要考虑。大多数的云服务倾向于赢家通吃。每个人想使用可靠安全的供应商。游戏规则是要挑选胜者。不幸的是现在还为时过早。我的建议:你在所选服务的API上创建一个抽象层,如果其中一个供应商成长为领先者,这样可以快速转换到那家供应商。