是否应将AWS Android SDK的DynamoDB调用替换为Retrofit实现?
问题1:是否真的需要引入Retrofit这类REST客户端?
完全不需要。你当前使用的是AWS官方提供的Android端DynamoDB SDK,已经封装了所有和DynamoDB服务端交互的逻辑,包括HTTP请求构造、AWS请求签名、凭证自动刷新、序列化/反序列化、错误重试等核心能力,不需要额外引入Retrofit重复造轮子。所谓「使用REST客户端是最佳实践」的说法适用场景是对接自定义开发的REST接口,而不是对接云厂商官方服务的场景。
问题2:投入时间做这一改造能获得哪些实际收益?
没有实际收益,反而会带来额外的维护成本:
- 你需要自行实现所有DynamoDB接口的请求参数封装、响应结果解析、AWS签名算法、Cognito凭证刷新逻辑、错误重试策略,这些都是官方SDK已经帮你处理好的能力,自行实现不仅耗时,还很容易出现安全漏洞、逻辑BUG
- 改造后需要自行跟进AWS DynamoDB的接口迭代,每次官方更新接口能力都要手动调整你的REST封装逻辑,维护成本大幅提升
- 没有性能、可用性层面的额外收益,官方SDK已经做了足够的优化,自行封装的REST调用性能不可能优于官方实现
唯一可能的潜在收益是如果后续你要完全替换掉AWS的云服务,自行搭建后端服务提供REST接口,这种场景下提前做改造有一定价值,但如果没有这类规划,改造完全没必要。
问题3:我可以保持现有实现不变吗?当前实现是否违反了AWS相关最佳实践?
完全可以保持现有实现不变,你的实现不仅没有违反AWS最佳实践,反而符合AWS官方的推荐做法:AWS明确优先推荐开发者使用对应语言/平台的官方SDK访问云服务,官方SDK会严格遵循AWS的安全、性能、可靠性规范,比自行封装REST调用的可靠性高得多。
另外你已经通过IAWSDAO做了接口层和实现层的隔离,就算后续真的需要调整底层访问逻辑,也只需要修改AWSRepository的实现,上层业务代码不需要调整,现有架构的扩展性已经足够。
你当前的实现只有一个小优化点:可以把aws-android-sdk-cognito的版本统一到2.33.0,和其他AWS SDK的版本保持一致,避免不同版本依赖冲突导致的潜在问题。
内容的提问来源于stack exchange,提问作者Diego Perez
相关产品推荐
相关产品推荐

