Как реализовать веб-сервер с API Gateway, Lambda, DynamoDB и Swift-Sprinter без единой строчки JavaScript

Возможно ли реализовать веб-сайт на Swift без использования JavaScript? Да, это так.

Уловка довольно старая и заключается в создании HTML-страницы на сервере. Идея состоит в том, чтобы избежать использования JavaScript на клиенте, стилизовать HTML с помощью CSS, создать страницы с помощью AWS Lambda и обслуживать контент с помощью API Gateway. Уровень устойчивости будет реализован с помощью DynamoDB. Мы собираемся использовать фреймворк Serverless для развертывания нашего проекта на AWS.

Бессерверная установка проекта

Мы предполагаем, что вы выполнили readme, чтобы настроить все требования:

  • AWS cli, настроенный с вашей учетной записью AWS
  • Докер
  • Бессерверный
  • Делать

Клонируем шаблон проекта:

git clone https://github.com/Andrea-Scuderi/aws-serverless-swift-sprinter-template.git
cd aws-serverless-swift-sprinter-template

Затем соберите проект:

./build.sh

./deploy.sh

После развертывания проекта в вашей учетной записи AWS создается конечная точка.

Просмотрите сгенерированный URL-адрес в веб-браузере. Веб-форма запущена и работает!

Как это работает?

Lambda предоставляет вычислительный блок в стеке AWS Serverless и взаимодействует с DynamoDB для получения сохраненных данных:

Содержимое сообщения HTML отслеживает действия, отправленные из браузера, и преобразуется Lambda в команду CRUD (Создать, Прочитать, Обновить, Удалить) для DynamoDB.

После обновления БД содержимое отображается на веб-странице ответа.

API-шлюз действует как прокси-сервер, публикующий лямбда-контент в качестве веб-сервера.

Бессерверная структура развертывает стеки в AWS.

Лямбда в Swift

Лямбда написана на Swift с использованием следующих фреймворков:

Lambda декодирует событие прокси-сервера API Gateway и запускает WebController.

WebController обновляет DynamoDB полученной информацией и отображает следующую HTML-страницу.

HTML-страница возвращается в качестве ответа веб-клиенту.

Использование графика для рендеринга HTML

WebController отображает HTML, передавая список записей докладчику, который отвечает за отображение нужной веб-страницы.

Функция present отображает главную страницу с созданным содержимым и оценивает действие без сохранения состояния, отправленное клиентом HTML.

HTML создается путем создания небольшой функции, реализованной с помощью платформы Plot. Картинка выше - это пример карты.

Использование aws-sdk-swift для DynamoDB

aws-sdk-swift - это клиент Swift для AWS, содержащий клиент для DynamoDB. Вот несколько фрагментов кода:

Заключение

Я надеюсь, что у меня возник интерес к серверным Swift и Swift-Sprinter.

Загляните в репозиторий GitHub и смело экспериментируйте. Я с нетерпением жду чего-нибудь приятного!

Спасибо за прочтение.