我需要实现以下功能。
- 客户端:iOS(和 Android)应用调用 Web 服务
- 服务器端:Goolge Cloud 上的 Web 服务。
服务器端应该有 HTTP/2、TLS 1.3
IBM Kitura 可以非常轻松地为 Android 和 iOS 生成客户端代码以与 SwiftNIO 服务器通信。
Kitura macOS 应用程序是创建服务定义和生成客户端和服务器代码的真正强大且简单的方法。Kitura 服务器是 SwiftNIO 2.0 服务器,可与最新的 Apple iOS 完美配合。
我探索了在 IBM Cloud 上运行服务器代码的可能性。IBM Swift Cloud Functions 非常轻量级。但它有两个大问题。
1) Using custom domain with LetsEncryt - SSL certificate is not updated automatically.
Which means every 90 days it must be updated manually.
Basically - no managed SSL.
2) only ipv4, no ipv6 support with means it cannot pass the
Apple App Store requirements.
所以这两个问题排除了 IBM Cloud。
使用 Google Cloud,这两个都不是问题。
现在我正在探索使用以下选项之一构建 RESTful API 的选项:
1) Swift
2) Golang
选项 1) 是一个很好的选项,因为 Kitura macOS 应用程序。我可以只用一种语言 Swift 进行开发,这会加快开发时间。有一个缺点 - 不支持 Google Cloud API 的 Swift 客户端库。
因此基于 SwiftNIO 的 API 可以用作前端,并且应该从 1) 调用 Google Golang Cloud Functions。
或者,如果我使用 ColdRun,则可以从 Swift 调用 Golang,因为可以从 iOS 使用 Gomobile。如何?
Kitura 还可以生成 OpenAPI 接口。
选项 2) - 专门使用 Golang。缺点 - 我无法使用 Kitura Swift 功能。
Google Cloud 服务器上有哪些选项:
1) Google Cloud Run (with container for Swift)
2) Google Cloud Functions for Golang
3) Google Appengine for Golang
选项:1)我没有关于冷启动和其他参数作为 2)和 3)的答案
2) 非常好且便宜:每月 200 万次调用(包括后台和 HTTP 调用) 400,000 GB 秒内存,200,000 GHz 秒计算时间 每月 5 GB 网络出口 最大功能持续时间 = 9 分钟冷启动 = .5-1.5 秒
3)冷启动=秒,但我想2)是这个参数上最好的。
我想 ipv4 和 ipv6 以及 Apple App Transport Security (ATS) 要求适用于 1)、2) 和 3),但我需要确认。
我没有关于 1)、2) 和 3) 上的 HTTP/2、TLS 1.3 需要做什么的答案。
还有一件事。我需要能够调用 BigQuery。目前唯一支持的即用型客户端库是 Golang。
所以我认为 Cloud Run + Golang CloudFunction 上的 SwiftNIO 应该是最好的选择。