Как реализовать веб-сервер с 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 с использованием следующих фреймворков:
- Aws-lambda-swift-sprinter-nio-plugin: реализует настраиваемую среду выполнения AWS с использованием Swift NIO.
- Aws-sdk-swift: взаимодействует с DynamoDB.
- Сюжет: отображает HTML.
- Bootstrap: CSS для HTML-страниц (JavaScript отключен).
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 и смело экспериментируйте. Я с нетерпением жду чего-нибудь приятного!
Спасибо за прочтение.