Мне нужно реализовать следующую функциональность.
- Клиентская часть: приложение для iOS (и Android) вызывает веб-сервис
- Сторона сервера: веб-сервис в Goolge Cloud.
На стороне сервера должен быть HTTP / 2, TLS 1.3
IBM Kitura упрощает создание клиентского кода для Android и iOS для связи с сервером SwiftNIO.
Приложение Kitura macOS - это действительно мощный и простой способ создания определения службы и генерации кода клиента и сервера. Сервер Kitura - это сервер SwiftNIO 2.0, который прекрасно работает с последней версией Apple iOS.
Я исследовал возможность запуска серверного кода в IBM Cloud. Облачные функции IBM Swift очень легкие. Но есть две большие проблемы с этим.
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) хороший из-за приложения Mac OS Kitura. Я могу разрабатывать только с одним языком Swift, который ускорит время разработки.
Есть недостаток - нет поддержки клиентских библиотек Swift для Google Cloud API.
Таким образом, API на основе SwiftNIO можно использовать в качестве внешнего интерфейса, а облачные функции Google Golang следует вызывать с 1).
Или, если я использую ColdRun, можно вызвать Golang из Swift, как можно использовать Gomobile из iOS. Как?
Также Kitura может генерировать интерфейсы OpenAPI.
Вариант 2) - использовать исключительно Голанг. Недостаток - я не могу использовать функциональность Kitura Swift.
Какие параметры доступны на сервере Google Cloud:
1) Google Cloud Run (with container for Swift)
2) Google Cloud Functions for Golang
3) Google Appengine for Golang
Опция:
1) У меня нет ответов о Cold Start и других параметрах, таких как 2) и 3)
2) очень хороший и недорогой:
2 миллиона вызовов в месяц (включая фоновые и HTTP-вызовы)
400 000 ГБ-секунд памяти, 200 000 ГГц-секунд вычислительного времени
5 ГБ выходной сети в месяц
Максимальная продолжительность функции = 9 минут
Холодный старт = 0,5-1,5 секунды
3) Холодный старт = секунды, но я полагаю, 2) является лучшим по этому параметру.
Полагаю, что требования ipv4 и ipv6 и Apple App Transport Security (ATS) соответствуют 1), 2) и 3), но мне нужно подтверждение.
У меня нет ответов о том, что нужно сделать с HTTP / 2, TLS 1.3 на 1), 2) и 3).
Еще одна вещь. Мне нужно, чтобы я мог позвонить в BigQuery. На данный момент единственная поддерживаемая готовая к использованию клиентская библиотека предназначена для Golang.
Так что я полагаю, что SwiftNIO для Cloud Run + Golang CloudFunction должны быть наилучшей возможностью.