移动应用程序:restful api 或 sdk dynamodb
mobile apps: restful api or sdk dynamodb
我正在构建我的第一个使用外部数据库存储数据的应用程序..
我正在努力解决以下问题:
如何连接我的数据库:使用Amazon DynamoDB sdk for Android 或在我自己的服务器上基于NodeJS 创建一个restful api,它将数据传递给DynamoDB?
我对此很陌生,当我浏览互联网时,我看到亚马逊建议使用 SDK。
唯一的问题是,如果我想更改功能中的数据结构,我的用户在当前版本的应用程序中会遇到什么样的问题?将我的亚马逊密钥保存在应用程序中是否安全(因为人们可能能够反编译该应用程序)?
另一方面,我确实需要为处理我的应用程序和 DynamoDB 之间的连接的额外服务器付费。那么...值得吗?
所以我对此很纠结....你们怎么看?
我会选择从您的移动应用程序直接访问 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
我不确定接受的答案是否完整,因为它不承认用例,也没有解决 "what if I want to change the data structure." 提出的问题好吧,如果您有过时的客户,请更改数据nosql 数据库中的文档结构,那么这些客户端将无法访问它。我不相信 DynamoDB 提供了一个中间件平台来支持这种 old-to-new 模型适配。您必须强制更新您的客户端。
事实上,有许多超出 user-based 权限的操作(Cognito 做得很好),您可能需要中间件来执行这些操作。也许您希望排序逻辑发生在 request-time,而不是在每个客户端应用程序中维护该排序逻辑的副本。
"is it worth it" 的问题可能取决于您的应用程序的复杂性以及您的用户与数据的关系(即,如果表示层基本上只是包装数据——然后直接访问 DynamoDB。如果您的表示层不只是包装数据,那么您可能应该使用自定义中间件)。事实上,我在 运行 我自己的 cost-benefit 分析时偶然发现了这个问题,我不确定我会采用哪种方法。我的另一个主要因素是我将来可能会选择切换数据库解决方案。如果我的客户直接访问数据库,那么在每个客户端上更新将更具挑战性。
我得出的一个确定的结论是,您应该在系统中的某个地方使用中间件,这样您就可以将数据库供应商与客户端逻辑或服务器分离尽可能多的逻辑,例如。在移动应用程序中:
writeToDatabase(数据数据){writeToDynamo(数据);}
为了实现这一点,AWS 建议使用 Amazon Api Gateway 作为 AWS 服务的代理,甚至预先配置了 Amazon API Gateway 作为 AWS 服务代理。
我正在构建我的第一个使用外部数据库存储数据的应用程序..
我正在努力解决以下问题: 如何连接我的数据库:使用Amazon DynamoDB sdk for Android 或在我自己的服务器上基于NodeJS 创建一个restful api,它将数据传递给DynamoDB?
我对此很陌生,当我浏览互联网时,我看到亚马逊建议使用 SDK。
唯一的问题是,如果我想更改功能中的数据结构,我的用户在当前版本的应用程序中会遇到什么样的问题?将我的亚马逊密钥保存在应用程序中是否安全(因为人们可能能够反编译该应用程序)?
另一方面,我确实需要为处理我的应用程序和 DynamoDB 之间的连接的额外服务器付费。那么...值得吗?
所以我对此很纠结....你们怎么看?
我会选择从您的移动应用程序直接访问 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
我不确定接受的答案是否完整,因为它不承认用例,也没有解决 "what if I want to change the data structure." 提出的问题好吧,如果您有过时的客户,请更改数据nosql 数据库中的文档结构,那么这些客户端将无法访问它。我不相信 DynamoDB 提供了一个中间件平台来支持这种 old-to-new 模型适配。您必须强制更新您的客户端。
事实上,有许多超出 user-based 权限的操作(Cognito 做得很好),您可能需要中间件来执行这些操作。也许您希望排序逻辑发生在 request-time,而不是在每个客户端应用程序中维护该排序逻辑的副本。
"is it worth it" 的问题可能取决于您的应用程序的复杂性以及您的用户与数据的关系(即,如果表示层基本上只是包装数据——然后直接访问 DynamoDB。如果您的表示层不只是包装数据,那么您可能应该使用自定义中间件)。事实上,我在 运行 我自己的 cost-benefit 分析时偶然发现了这个问题,我不确定我会采用哪种方法。我的另一个主要因素是我将来可能会选择切换数据库解决方案。如果我的客户直接访问数据库,那么在每个客户端上更新将更具挑战性。
我得出的一个确定的结论是,您应该在系统中的某个地方使用中间件,这样您就可以将数据库供应商与客户端逻辑或服务器分离尽可能多的逻辑,例如。在移动应用程序中: writeToDatabase(数据数据){writeToDynamo(数据);}
为了实现这一点,AWS 建议使用 Amazon Api Gateway 作为 AWS 服务的代理,甚至预先配置了 Amazon API Gateway 作为 AWS 服务代理。