Читатели като вас помагат в подкрепа на 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, за да генерирате шаблонния код от схемата във вашия проект.

Създавам tools.go файл във вашата работна директория и добавете тези редове код, за да включите gqlgen пакет:

// + инструменти за изграждане

пакет инструменти

внос _ "github.com/99designs/gqlgen"

The tools.go файлът указва инструментите за изграждане на gqlgen пакет.

Изпълнете тези команди във вашата работна директория, за да инсталирате пакета gqlgen и неговите зависимости:

отивам инсталирайте github.com/99дизайни/gqlgen@най-нови
отивам мод подреден

Можете да инициализирате нов GraphQL проект, когато стартирате пакета GraphQL с в него команда като аргумент:

отивам стартирайте github.com/99дизайни/gqlgen инициал

Ще трябва да имате вашата схема в a schema.graphql файл, намиращ се във вашата работна директория, за да инициализирате проект.

Стартирайте server.go файл за стартиране на вашия GraphQL сървър след добавяне на функционалност към вашето приложение GraphQL:

отивам стартирайте сървър.отивам

2. Пакетът graphql-go

Пакетът graphql-go е популярна библиотека GraphQL, която има за цел да предостави пълната Проект на спецификация на GraphQL за изграждане на GraphQL услуги в Go.

Пакетът graphql-go използва подхода на типовете по време на изпълнение; имате опцията да декларирате вашата схема в Go код и пакетът проверява по време на изпълнение.

Можете да прилагате заявки, мутации и абонаменти и да генерирате примери с пакета, но няма функционалност за генерирани enum, входове или отворено проследяване.

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

Ако сте запознати с изграждане на RESTful услуги в Go with the http пакет, ще откриете, че пакетът graphql-go е лесен за използване.

Изпълнете тези команди във вашата работна директория, за да добавите пакета graphql-go и неговите зависимости към вашия проект:

отивам вземете github.com/graph-gophers/graphql-отивам

Ето пример за стартиране на прост GraphQL сървър:

пакет основен

импортиране (
"дневник"
"net/http"

graphql "github.com/graph-gophers/graphql-отивам"
"github.com/graph-gophers/graphql-отивам/relay"
)

Тип заявка структура{}

функ(_ *заявка)Здравейте()низ { връщане "Здравей свят!" }

функосновен() {
schemaExample := `
Тип Заявка {
здравей: Стринг!
}
`

схема := graphql. MustParseSchema (schemaExample, &query{})
http. Handle("/query", &relay. Манипулатор {схема: схема})
дневник. Фатално (http. ListenAndServe(":8080", нула))
}

The Здравейте метод на заявка struct е резолвер за крайната точка на GraphQL, която връща hello world. The schemaExample променливата е дефиницията на схемата и сървърът ще работи на порт 8080 с http пакет ListenAndServe метод.

3. Пакетът Thunder

The гръм рамката възприема подхода struct first; вие декларирате структура, която моделира вашата GraphQL схема. То генерира GraphQL схема от Go данните за обработка на пакетиране на заявки, заявки на живо, мутации, абонаменти и генериране на примери.

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

Няма функционалност за вграждане, интерфейси, генерирани enums или входове, обединяване, отворено проследяване или персонализирани грешки в пакета Thunder. Той обаче е един от най-лесните за използване в сравнение с други популярни пакети и е отличен начален пакет, ако нямате опит с GraphQL.

Ще трябва да изпълните тази команда в терминала на вашата работна директория, за да инсталирате пакета Thunder и неговите зависимости:

отивам вземете github.com/samsarahq/thunder/graphql

Ще трябва да декларирате структурен модел за схемата, да напишете резолверите и да създадете инстанция на сървъра, за да стартирате прост GraphQL сървър с пакета Thunder.

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

"github.com/samsarahq/thunder/graphql"
"github.com/samsarahq/thunder/graphql/graphiql"
"github.com/samsarahq/thunder/graphql/introspection"
"github.com/samsarahq/thunder/graphql/schemabuilder"
"github.com/samsarahq/thunder/reactive"
)

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

// сървърът е нашият graphql сървър.
Тип сървър структура {
публикации []пост
}

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

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

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

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

// registerPost регистрира типа публикация.
функ(s * сървър)registerPost(схема *schemabuilder. схема) {
obj := схема. Object("Post", post{})

обект FieldFunc("възраст", функ(ctx контекст. Контекст, p *пост)низ {
реактивен. InvalidateAfter (ctx, 5*време. второ)
връщане време. Тъй като (стр. CreatedAt).String()
})
}

// схема изгражда схемата на graphql.
функ(s * сървър)схема() *graphql.Схема {
builder := schemabuilder. Нова схема()
s.registerQuery (конструктор)
s.registerMutation (строител)
s.registerPost (конструктор)
връщане строител. MustBuild()
}

функосновен() {
// Създаване на сървър, изграждане на сървър и обслужване на схемата на порт 3030.
сървър := &сървър{
мнения: []пост{
{Заглавие: "първа публикация!", Основен текст: "Първи бях тук!", CreatedAt: време. Сега()},
{Заглавие: "graphql", Основен текст: "чухте ли за Thunder?", CreatedAt: време. Сега()},
},
}

схема := server.schema()
интроспекция. AddIntrospectionToSchema (схема)

// Изложете схема и графика.
http. Handle("/graphql", graphql. Манипулатор (схема))
http. Handle("/graphiql/", http. StripPrefix("/graphiql/", graphiql. Манипулатор()))
http. ListenAndServe(":3030", нула)
}

The пост struct е моделът за схемата GraphQL, а сървър struct е екземплярът на сървъра. The registerQuery, registerMutation, и registerPost методите са резолверни функции за заявки, мутации и съхранение на данни.

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

Можете да правите заявки за GraphQL API в Go с вградени пакети

GraphQL е базиран на HTTP и можете да използвате GraphQL API с вградения http пакет и други пакети, подобни на RESTful API. В екосистемата на Go има и пакети, които ще ви позволят бързо да използвате GraphQL API.