Создание популярного сервера Go GQL - Часть 1

Настройка проекта и начальные шаги

Давайте сделаем самоуверенный сервер GraphQL, используя веб-фреймворк Gin-gonic, Goth для соединений OAuth2, GORM в качестве ORM БД и GQLGen для построения серверов GraphQL.

В этом проекте предполагается, что у вас есть хотя бы базовые знания Go, установлен Go 1.12+ и VSCode (предпочтительно) или аналогичная IDE.

Настройка проекта

Мы будем придерживаться стандартной схемы проекта Go для этой услуги. Взгляните на спецификацию. Он самоуверен и служит хорошей базой, хотя мы можем немного отклониться от его рекомендаций.

Начнем с создания каталога в любом месте, где мы хотим:

Давайте создадим весь макет проекта с помощью:

internal/gql-server будет содержать все связанные файлы для сервера gql.

cmd/gql-server будет содержать main.go файл для сервера, точку входа, которая склеит все это вместе.

Поскольку мы используем Go 1.12+, вы можете использовать любой каталог за пределами $GOPATH/src пути. Мы хотим использовать go modules для инициализации нашего проекта. Нам предстоит бежать:

Кодирование нашего веб-сервера

Теперь мы можем начать добавлять пакеты в наш проект! Начнем с нашего веб-фреймворка: gin-gonic

С сайта gin-gonic.com:

Что такое Джин? Джин - это веб-фреймворк, написанный на Голанге. Он имеет API-интерфейс, похожий на мартини, с гораздо большей производительностью, до 40 раз быстрее. Если вам нужна производительность и хорошая производительность, вам понравится джин.

Приступим к созданию веб-сервера.

Создайте main.go файл в cmd/gql-server:

И вставьте этот код-заполнитель:

Если вы go run cmd/gql-server/main.go этот код, он вызовет сервер Gin, слушающий locahost: 7777, и получит в браузере распечатку OK. Оно работает!

Теперь давайте реорганизуем этот код, используя нашу уже существующую структуру каталогов, папки script, internal и pkg:

Как насчет этого? Одна строка, и у нас на сервере заканчивается папка pkg.

Теперь мы можем создать сервер с помощью скрипта:

И перед запуском убедитесь, что chmod +x вы:

Теперь мы можем начать сборку нашего сервера, вот так:

Автономный сервер 16M, неплохо, я думаю, и это может быть размер его образа докера!

Хорошо, теперь попробуем то, что было построено:

Это серьезная скорость, 39 µ (микросекунд).

Мы можем дополнительно улучшить код нашего сервера и загрузить конфигурации из файла .env. Создадим для нашего сервера несколько utils:

Код в значительной степени не требует пояснений. Если ENV var не существует, программа запаникует. Они нужны нам для запуска. Теперь меняем

- pkg / server / main.go на это:

И мы видим, как он начинает приобретать форму хорошо продуманного проекта!

Мы все еще можем сделать пару вещей, например, запустить сервер локально, используя этот скрипт:

Это настроит ENV переменных и go run сервер.

Вы также можете добавить .gitignore файл. Запустите git init, установите источник в свой собственный репозиторий и git push это :)

Этот проект будет продолжен в Части 2, где мы добавим GQLGen часть сервера!



Весь код доступен в репозитории GitHub.