Подготовьте и запустите свой сайт электронной коммерции с помощью этого руководства по CMS на Go

Мы давно не« играли в го ».

Наш ведущий разработчик, размышляя о нашей дорожной карте контента.

«Я вообще не работал с Go , - думаю я про себя.

Сегодня я попробую пойти (да, я знаю 🤦‍♂️), исследуя экосистему Голанга и возможности электронной коммерции, которые она предлагает.

Затем я покажу вам, как создать собственный интернет-магазин на Go с помощью Ponzu CMS.

Учебные шаги:

  1. Настройка Ponzu CMS.
  2. Создание внешнего интерфейса магазина с помощью генератора статических сайтов Go.
  3. Развертывание веб-сайта в Netlify.
  4. Включение возможностей электронной коммерции с помощью Snipcart.

Давайте сначала сделаем шаг назад и погрузимся во вселенную Голанга.

Подходит ли Голанг для электронной коммерции?

Что Go?

Я думаю, что все еще правомерно называть Go многообещающим языком программирования, поскольку сообщество разработчиков определяет его как один из языков, которые оно больше всего желает изучать. Он также занимает пятое место среди самых любимых, выше, чем JavaScript и C # среди других.

Этот пост не об изучении языка. Если вы чувствуете, что нуждаетесь в надлежащем ознакомлении с сильными и слабыми сторонами Golang, прочтите этот отличный пост.

Возьмем, к примеру, Hugo, один из самых популярных генераторов статических сайтов. Широко признанный самым быстрым в своем роде, он быстро создаст изящный интерфейс для блога или электронной коммерции.

Бэкэнд-решения для электронной коммерции

Некоторые из этих инструментов специально созданы для создания интернет-магазинов и бэкэндов электронной коммерции:

  • QOR - SDK Golang для разработки электронной коммерции и CMS. Он состоит из модулей, которые абстрагируют общие функции таких систем. Создано разработчиками Go для разработчиков Go.
  • Ottemo - мобильная платформа, позиционируемая как электронная коммерция нового поколения для малых и средних компаний.
  • Upnext - отличается тем, что действует как платежный шлюз, используя Golang для ускорения проверки электронной коммерции.

Глядя на эти решения для электронной коммерции, вы быстро поймете, что это в основном массивные платформы, которые могут не дать вам, как разработчикам, большой свободы для создания пользовательского интерфейса покупок.

Итак, есть ли здесь альтернативы? На ум приходят два:

  1. Написание собственного API электронной коммерции Go - трудоемкий вариант, но если у вас есть время и навыки, чтобы сделать это правильно, снимаю шляпу!
  2. Использование стороннего решения для интеграции с выбранной вами CMS / приложением на базе Go - именно то, что я сделаю в следующей демонстрации!

Если ни одно из этих решений не соответствует вашим потребностям, возможно, Golang не подходит для вашего серверного приложения электронной коммерции. Вы думали о том, чтобы попробовать Node.js, Python / Django или PHP / Laravel?

Техническое руководство: электронная коммерция Golang с Ponzu CMS

Введение в Ponzu: Golang CMS

Я буду использовать Ponzu CMS для управления контентом моего приложения для электронной коммерции. Вкратце, это эффективная инфраструктура HTTP-сервера с открытым исходным кодом и CMS на базе Go.

По словам его создателя Стива Мануэля:

«Он прост в использовании, совместим с JSON и оснащен быстрым и параллельным сервером API. Я хотел выбрать те части других платформ, которые мне нравятся: взять отличный бэкэнд CMS от WordPress, интерфейс командной строки для разработчиков, который будет генерировать для меня код из Rails, и невероятно быстрый JSON API от Netty ».

Похоже на аккуратный минималистичный фреймворк; отличный выбор для небольших случаев использования с невероятно быстрой установкой и настройкой, автоматической настройкой HTTPS и первоклассной производительностью.

Как безголовая CMS она позволяет мне использовать подход JAMstack.

Стек будет полностью опускаться до веб-сайта магазина: я добавлю Хьюго в качестве генератора статического сайта.

Итак, приступим!

Немного контекста для моей демонстрации

Уровень моря повышается. Подъем всего на несколько футов мог намочить ноги. Лучше приготовьтесь! Итак, давайте начнем с простого магазина, в котором будут продаваться товары, которые помогут людям справиться с наводнениями. У нас будут ограниченные запасы, поэтому очень важно отслеживать наши запасы.

Предварительные требования

  • Базовые знания го
  • Установив Go и доступный в вашем PATH
  • Аккаунт Snipcart (навсегда бесплатно в тестовом режиме)

Итак, приступим.

1. Настройка Ponzu CMS и API продуктов.

Запуск экземпляра Ponzu означает выполнение нескольких команд терминала:

Как только вы сделаете это, перейдите к https://localhost:10443/admin.

Прежде чем вы запачкаете руки, нужно выполнить одноразовую настройку:

Вы попадете в админку. Выглядит немного пусто, правда?

Это потому, что по-прежнему недоступен какой-либо тип контента. Ponzu предоставляет для этого генератор командной строки.

Давайте создадим product тип контента. Остановите приложение (CTRL + C) и запустите следующее:

При выполнении приведенной выше команды Ponzu создает файл product.go в каталоге content вашего приложения. Это основа определения этого типа контента. Вы можете расширить его, чтобы он соответствовал вашим потребностям (мы еще вернемся к этому).

Прямо сейчас просто оставьте все как есть, перезапустите приложение и вернитесь на панель администратора.

Вы заметите, что тип контента Продукт теперь доступен на панели навигации. Щелкнув по нему, вы получите доступ к списку записей о продуктах:

Создайте свой первый продукт:

Бац!

После создания ваш новый продукт будет мгновенно доступен через конечную точку API Ponzu:

Этот последний шаг завершает нашу базовую настройку CMS без головы. А теперь хрустящая часть!

2. Создание веб-сайта магазина с помощью Golang SSG.

Магазин будет сайтом Hugo, размещенным на Netlify.

Вам нужно будет установить Hugo. А теперь давайте создадим ваш сайт.

Вы можете сделать это, используя тему Beautiful Hugo и немного ее настроив.

Я не буду вдаваться в подробности объяснения настройки, поскольку это не наша основная задача. Более подробное прохождение описано в этой ранней части.

Теперь вы можете добавить продукт архетип и запустить команду типа hugo new product/my-awesome-product.md для создания контента, но вы помните этот блестящий каталог продуктов Ponzu?

Вы же хотите, чтобы все ваши товары добавлялись автоматически? Давай сделаем так.

2.1 Создание продуктов для Hugo

Что вам нужно сделать, так это написать простую программу, которая будет считывать продукты из вашего Ponzu API и генерировать для них файлы контента Hugo Markdown.

Поскольку в миксе уже есть Понзу и Хьюго, имеет смысл использовать для этого Go, не так ли?

Просто создайте простой пакет Go на своем сайте Hugo:

Вот код:

Вышесказанное довольно просто; он читает все продукты и создает файл содержимого продукта для каждого из них, сопоставляя все соответствующие поля.

Вы можете протестировать этот сценарий, запустив go build ./ponzuImport.go

3. Развертывание в Netlify

Вы хотите создавать продукты для каждой сборки, поэтому создайте следующий build.sh скрипт в корне своего веб-сайта:

Затем настройте Netlify для запуска этого скрипта при создании вашего сайта. Просто добавьте этот netlify.toml файл в корень своего веб-сайта:

Вам нужно будет установить переменную среды PONZU_HOST_URL в конфигурации сборки Netlify. Он должен указывать на ваш живой экземпляр Понзу. Независимо от того, является ли это прокси-сервером ngrok вашего локального приложения (пока оно еще в разработке) или облачным приложением, его необходимо настроить.

4. Добавление возможностей электронной коммерции на веб-сайт Go.

Давайте добавим необходимую разметку Snipcart под элемент <head> вашего макета:

Затем визуализируйте кнопки покупки, как показано в вашем шаблоне:

А теперь, как насчет того, чтобы обработать это Stock поле, которое мы видели ранее?

4.1 Включение управления запасами

Snipcart предлагает управление запасами на панели инструментов продавца.

Вы не хотите ждать, пока ваши продукты будут куплены, прежде чем вы увидите их на панели инструментов, поэтому давайте просканируем их заранее:

Ваши продукты теперь доступны в Snipcart! Установим для них акции:

Теперь вам нужно адаптировать скрипт импорта для получения запасов ваших продуктов. Для этого вам нужно будет использовать Snipcart’s API.

Откройте ponzuImport.go и добавьте эти две структуры:

Затем добавьте в конец функции mapPonzuProduct следующее:

Обратите внимание, что ваш закрытый ключ API Snipcart должен быть установлен в переменной среды SNIPCART_PRIVATE_API_KEY в вашей конфигурации сборки Netlify.

Аккуратный! С этого момента при запуске вашей сборки также будет загружено поле Stock.

В нашей грандиозной схеме не хватает одного последнего элемента: запуск вашей сборки Netlify при изменении данных.

4.2 Создание триггеров сборки

Во-первых, создайте крючок сборки Netlify для своего веб-сайта. Любой запрос POST к этому URL-адресу приведет к новому развертыванию.

Настроить веб-перехватчики в Snipcart очень просто. Вставьте URL-адрес на страницу конфигурации Webhooks на панели инструментов продавца:

Вы также хотите вызвать этот веб-перехватчик, когда в ваших данных Ponzu происходит изменение. Ponzu CMS предлагает несколько точек расширения с использованием интерфейсов.

Давайте расширим определение типа контента вашего продукта, определив крючки для сохранения. Вернитесь в приложение Ponzu и добавьте в content/product.go следующее:

Аааааааааааааааааааааааааааааааааааааааааааа! Теперь у вас есть свежая настройка электронной коммерции Golang JAMstack с управлением запасами. Как это круто?

Живая демонстрация и репозиторий на GitHub

Смотрите живую демонстрацию здесь.

См. Репозиторий GitHub здесь.

Заключительные мысли

Понзу великолепен. Создатель много думал о том, чтобы сделать путь разработчика максимально простым. Простая установка сертификата HTTPS с помощью Let’s Encrypt - это просто фантастика. В процессе сборки создается собственный исполняемый файл, который можно запускать где угодно.

Что касается производственной среды, у меня возникла проблема с пакетом сборки Heroku для Go - не очень хорошо сочеталась со структурой Понзу. Я рекомендую запустить ваше приложение Ponzu в Docker.

С некоторыми препятствиями здесь и там я потратил около двух дней на создание этой демонстрации, включая кривую обучения. Более опытный разработчик Go должен пройти этот путь быстрее.

Чтобы продвинуть этот учебник дальше? Ponzu CMS поддерживает HTTP / 2.0, в котором есть классная функция под названием Server Push. При создании SPA, поддерживаемого Ponzu, вы можете уменьшить количество удаленных вызовов, которые вы делаете на бэкэнд, используя Server Push для объединения нескольких полезных данных, которые клиент, вероятно, запросит в будущем!

Есть вопросы по этому руководству по Snipcart + Golang? Если есть какие-либо комментарии или вопросы, пишите в комментариях. А если вам понравился этот пост, найдите секунду, чтобы 👏 или поделиться в Твиттере!

Первоначально опубликовано в блоге Snipcart и в нашем информационном бюллетене.