移动应用程序:restful api或sdk dynamodb

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

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

我对此很新,当我查看互联网时,我看到亚马逊build议使用SDK。

唯一的问题是,如果我想改变function中的数据结构,我的用户会遇到什么样的问题与当前版本的应用程序? 是否可以安全地将我的亚马逊键保存在应用程序(可能导致人们可以反编译的应用程序)?

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

所以我很努力….你们觉得呢?

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

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

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

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

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

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

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

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

为此,AWSbuild议使用Amazon Api Gateway作为AWS服务的代理,甚至预先configurationAmazon API Gateway以充当AWS服务代理。