【问题标题】:mobile apps: restful api or sdk dynamodb移动应用:restful api 或 sdk dynamodb
【发布时间】:2015-03-03 00:57:03
【问题描述】:

我正在构建我的第一个应用程序,它使用外部数据库来存储数据..

我正在努力解决以下问题: 如何连接我的数据库:使用适用于 Android 的 Amazon DynamoDB sdk 或在我自己的服务器上创建一个基于 NodeJS 的 restful api,将数据传递给 DynamoDB?

我对此很陌生,当我浏览互联网时,我看到亚马逊建议使用 SDK。

唯一的问题是,如果我想更改功能中的数据结构,我的用户在使用当前版本的应用程序时会遇到什么样的问题?将我的亚马逊密钥保存在应用程序中是否安全(因为人们可能能够反编译应用程序)?

另一方面,我必须为处理我的应用程序和 DynamoDB 之间连接的额外服务器付费。那么……值得吗?

所以我在这方面很挣扎......你们怎么看?

【问题讨论】:

    标签: android node.js rest amazon-web-services amazon-dynamodb


    【解决方案1】:

    我会直接从您的移动应用程序访问 DynamoDB。 这将使您可以更轻松地扩展您的应用程序:您不需要维护、操作和保护中间层,AWS 会为您做到这一点。您还将节省运行几个 NodeJS 服务器、负载平衡器等的成本...

    您不应在应用程序中存储访问密钥/秘密密钥,而应使用 AWS Cognito Identity 服务为您的用户会话动态接收访问密钥和秘密密钥。这些密钥的范围将限制为您为 Cognito 用户定义的任何权限,并且时间有限(默认为 15 分钟)

    Cognito 与后端身份提供商合作以验证您的用户(Facebook、Google、Amazon、openID connect 或您自己的后端),还可以与未经身份验证的用户合作。

    关于 Cognito 的更多信息:http://aws.amazon.com/cognito/ 更多关于适用于 Android 移动应用程序的 Cognito ID 的信息:http://docs.aws.amazon.com/mobile/sdkforandroid/developerguide/cognito-auth.html

    【讨论】:

    • 感谢您完整而清晰的回答 :) 我希望得到的答案哈哈,为我节省了相当多的时间来配置中间层的节点应用程序。我来看看 Cognito!
    【解决方案2】:

    我不确定接受的答案是否完整,因为它不承认用例,也没有解决“如果我想更改数据结构怎么办”的问题。好吧,如果您有过时的客户端,并且更改了 nosql 数据库中文档的数据结构,那么这些客户端将无法访问它。我不相信 DynamoDB 提供了一个中间件平台来支持这种从旧到新的模型适应。您必须强制更新您的客户。

    事实上,除了基于用户的权限(Cognito 做得很好)之外,还有许多操作可能需要中间件。也许您希望排序逻辑在请求时发生,而不是在每个客户端应用程序中维护该排序逻辑的副本。

    “是否值得”的问题可能取决于您的应用程序的复杂性以及您的用户与数据的关系(即,如果表示层基本上只是包装数据——那么直接访问 DynamoDB。如果您的演示层不仅仅是包装数据,那么您可能应该使用自定义中间件)。事实上,我在进行自己的成本效益分析时偶然发现了这个问题,并且不确定我会采用哪种方法。我的另一个主要因素是我将来可能会选择切换数据库解决方案。如果我的客户直接访问数据库,那么在每个客户端上更新都会更具挑战性。

    我得出的一个确定结论是,您应该在系统中某处使用中间件,这样您就可以尽可能地将数据库供应商与客户端逻辑或服务器逻辑分离,例如。在移动应用程序中: writeToDatabase(数据数据){writeToDynamo(数据);}

    为了实现这一点,AWS 建议使用 Amazon Api Gateway 作为 AWS 服务的代理,甚至还预先配置了 Amazon API Gateway 以充当 AWS 服务代理。

    【讨论】:

      猜你喜欢
      • 2016-08-06
      • 1970-01-01
      • 2016-10-22
      • 2015-04-14
      • 2017-03-09
      • 1970-01-01
      • 2017-03-20
      • 2014-06-03
      • 2014-11-02
      相关资源
      最近更新 更多