Создание популярного сервера 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.