Такие читатели, как вы, помогают поддерживать MUO. Когда вы совершаете покупку по ссылкам на нашем сайте, мы можем получать партнерскую комиссию.

GraphQL — это спецификация на основе HTTP, которая решает большинство проблем, с которыми вы столкнетесь при создании RESTful. API. Он подходит для создания сложных API, поскольку вы можете использовать одну конечную точку для доступа к данным из многих схем.

GraphQL устраняет такие проблемы, как избыточная и недостаточная выборка в REST. Вы можете создать клиент, который запрашивает определенные поля без дополнительных вызовов API.

Существует несколько пакетов Go, которые вы можете использовать для создания приложений на основе GraphQL, от серверов до API.

1. Пакет gqlgen

gqlgen (генератор GraphQL) — это многофункциональный, типобезопасный пакет для создания и создания серверов GraphQL и API.

Пакет gqlgen использует подход, основанный на схеме, при котором вы используете GraphQL SDL для определения своей схемы. Затем он генерирует шаблонный код, который вы можете настроить для настройки своего сервера GraphQL и API.

instagram viewer

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

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

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

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

// +инструменты сборки

упаковка инструменты

Импортировать _ "github.com/99designs/gqlgen"

инструменты.го файл определяет инструменты сборки для гклген упаковка.

Запустите эти команды в своем рабочем каталоге, чтобы установить пакет gqlgen и его зависимости:

идти установить github.com/99дизайны/gqlgen@latest
идти мод аккуратный

Вы можете инициализировать новый проект GraphQL при запуске пакета GraphQL с в этом команда в качестве аргумента:

идти запустить github.com/99дизайны/gqlgen init

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

Запустите сервер.го файл для запуска вашего сервера GraphQL после добавления функциональности в приложение GraphQL:

идти запустить сервер.идти

2. Пакет graphql-go

Пакет graphql-go — популярная библиотека GraphQL, целью которой является предоставление полной Черновая спецификация GraphQL для создания сервисов GraphQL в Go.

Пакет graphql-go использует подход типов времени выполнения; у вас есть возможность объявить свою схему в коде Go, и пакет проверяется во время выполнения.

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

graphql-go имеет минимальный API с поддержкой как встроенных пакетов, так и популярных сторонних. Он имеет поддержку для OpenTelemetry и OpenTracing стандарты, проверка типа схемы по распознавателям, параллельное выполнение распознавателей и многие другие функции.

Если вы знакомы с создание сервисов RESTful в Go с помощью http упаковка, вы обнаружите, что пакет graphql-go прост в использовании.

Запустите эти команды в своем рабочем каталоге, чтобы добавить пакет graphql-go и его зависимости в ваш проект:

идти получить github.com/graph-gophers/graphql-идти

Вот пример запуска простого сервера GraphQL:

упаковка основной

Импортировать (
"бревно"
"сеть/http"

graphql "github.com/graph-gophers/graphql-идти"
"github.com/graph-gophers/graphql-идти/relay"
)

тип запрос структура{}

функция(_ *запрос)Привет()нить { возвращаться "Привет, мир!" }

функцияосновной() {
пример схемы := `
тип Запрос {
привет: Строка!
}
`

схема := графql. MustParseSchema (пример схемы, &запрос{})
http. Обработать("/запрос", &relay. Обработчик {Схема: схема})
бревно. Фатальный (http. Прослушать И Обслужить(":8080", ноль))
}

Привет метод запрос struct — это преобразователь для конечной точки GraphQL, который возвращает hello world. схемаПример является определением схемы, и сервер будет работать на порту 8080 с http пакет слушать и обслуживать метод.

3. Пакет «Гром»

Гром framework использует подход struct first; вы объявляете структуру, которая моделирует вашу схему GraphQL. Он генерирует Схема GraphQL из данных Go для обработки пакетной обработки запросов, оперативных запросов, мутаций, подписок и генерации примеров.

Thunder обеспечивает безопасность типов с привязками типов и другими функциями, включая построение схемы на основе отражения, встроенное параллельное выполнение и пакетная обработка, встроенный редактор GraphiQL и раздельные схемы для более крупного GraphQL серверы.

В пакете Thunder нет функций для встраивания, интерфейсов, сгенерированных перечислений или входных данных, объединения, открытой трассировки или пользовательских ошибок. Тем не менее, это один из самых простых в использовании пакетов по сравнению с другими популярными пакетами, и он является отличным стартовым пакетом, если у вас нет опыта работы с GraphQL.

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

идти получить github.com/samsarahq/thunder/graphql

Вам нужно будет объявить структурную модель для схемы, написать преобразователи и создать экземпляр сервера, чтобы запустить простой сервер GraphQL с пакетом Thunder.

Импортировать (
"контекст"
"сеть/http"
"время"

"github.com/samsarahq/thunder/graphql"
"github.com/samsarahq/гром/graphql/graphiql"
"github.com/samsarahq/thunder/graphql/самоанализ"
"github.com/samsarahq/thunder/graphql/schemabuilder"
"github.com/samsarahq/гром/реактивный"
)

тип почта структура {
Заголовок нить
Тело нить
СозданоВо время. Время
}

// server — это наш сервер graphql.
тип сервер структура {
посты [] посты
}

// registerQuery регистрирует корневой тип запроса.
функция(с * сервер)регистрацияЗапрос(схема *schemabuilder. Схема) {
объект := схема. Запрос()

объект FieldFunc("сообщения", функция() []почта {
возвращаться s.posts
})
}

// registerMutation регистрирует тип корневой мутации.
функция(с * сервер)регистрацияМутация(схема *schemabuilder. Схема) {
объект := схема. Мутация()

объект FieldFunc("эхо", функция(аргументы структура{ Сообщение нить })нить {
возвращаться аргументы. Сообщение
})
}

// registerPost регистрирует тип сообщения.
функция(с * сервер)регистрацияPost(схема *schemabuilder. Схема) {
объект := схема. Объект("Пост", пост{})

объект FieldFunc("возраст", функция(контекст ctx. Контекст, п*пост)нить {
реактивный. InvalidateAfter (ctx, 5*время. Второй)
возвращаться время. Поскольку (стр. CreatedAt).String()
})
}

// схема строит схему graphql.
функция(с * сервер)схема() *графql.Схема {
построитель := построитель схемы. НоваяСхема()
s.registerQuery (построитель)
s.registerMutation (построитель)
s.registerPost (конструктор)
возвращаться строитель. ДолженПостроить()
}

функцияосновной() {
// Создаем экземпляр сервера, создаем сервер и обслуживаем схему через порт 3030.
сервер := &сервер{
сообщения: []сообщение{
{Title: "Первый пост!", Body: "Я был здесь первым!", CreatedAt: time. Сейчас()},
{Title: "graphql", Body: "Вы слышали о Громе?", CreatedAt: time. Сейчас()},
},
}

схема := сервер.схема()
самоанализ. AddIntrospectionToSchema (схема)

// Предоставляем схему и graphiql.
http. Обработать("/graphql", graphql. Обработчик (схема))
http. Обработать("/graphiql/", http. StripPrefix("/graphiql/", graphiql. Обработчик()))
http. Прослушать И Обслужить(":3030", ноль)
}

почта struct — это модель схемы GraphQL, а сервер struct — это экземпляр сервера. регистрацияЗапрос, регистрацияМутация, и регистрацияPost методы — это функции-преобразователи для запросов, мутаций и хранения данных.

основной функция начинается с сервера GraphQL на порту 3030 и редактор GraphQL.

Вы можете запрашивать GraphQL API в Go со встроенными пакетами

GraphQL основан на HTTP, и вы можете использовать API-интерфейсы GraphQL со встроенным http package и другие пакеты, похожие на RESTful API. В экосистеме Go также есть пакеты, которые позволят вам быстро использовать API-интерфейсы GraphQL.