GraphQL-Bibliothek Go (Golang) – ein leistungsstarkes Werkzeug zur API-Erstellung
GraphQL ist eine Abfragesprache für APIs, die es Clients ermöglicht, nur die Daten anzufordern, die sie tatsächlich benötigen. Im Go (Golang)-Ökosystem ist gqlgen (GraphQL Go Generate) eine der beliebtesten Bibliotheken für die Arbeit mit GraphQL. Diese Bibliothek ermöglicht die Erstellung typsicherer GraphQL-Server mit minimalem Boilerplate-Code. In diesem Artikel werden wir gqlgen, seine Installation, Konfiguration und Anwendungsbeispiele im Detail behandeln.
Was ist gqlgen?
gqlgen ist ein Code-Generator für Go, der automatisch Resolver und Typen basierend auf Ihrem GraphQL-Schema erstellt. Hauptvorteile:
- Typsicherheit – alle Typen werden zur Kompilierzeit geprüft
- Minimaler Boilerplate-Code – die Bibliothek generiert den Großteil des Codes für Sie
- Flexibilität – Unterstützung für Abonnements, Mutationen und komplexe Abfragen
- Leistung – hohe Geschwindigkeit, typisch für Go
Installation von gqlgen
Um zu beginnen, installieren Sie die Bibliothek und das Kommandozeilen-Tool:
go get github.com/99designs/gqlgengo run github.com/99designs/gqlgen initDer Befehl init erstellt eine grundlegende Projektstruktur mit den Dateien schema.graphqls, gqlgen.yml und generiertem Code.
Projektstruktur
Nach der Initialisierung erhalten Sie die folgende Struktur:
my-graphql-app/├── gqlgen.yml # Generator-Konfiguration├── graph/│ ├── schema.graphqls # GraphQL-Schema│ ├── resolver.go # Resolver (Ihr Code)│ └── models_gen.go # Generierte Modelle (nicht bearbeiten)├── server.go # Einstiegspunkt└── go.modSchreiben eines GraphQL-Schemas
Beispiel für eine schema.graphqls-Datei für einen einfachen Blog:
type Query { posts: [Post!]! post(id: ID!): Post}
type Mutation { createPost(input: PostInput!): Post! deletePost(id: ID!): Boolean!}
type Post { id: ID! title: String! content: String! author: String! createdAt: Time!}
input PostInput { title: String! content: String! author: String!}
scalar TimeCode-Generierung
Nachdem Sie das Schema beschrieben haben, führen Sie aus:
go run github.com/99designs/gqlgen generateDies erstellt die Dateien models_gen.go und generated.go mit Typen und Resolver-Schnittstellen.
Implementierung der Resolver
Jetzt müssen Sie die Logik in resolver.go implementieren:
package graph
import ( "context" "time")
// Datenmodelltype Post struct { ID string `json:"id"` Title string `json:"title"` Content string `json:"content"` Author string `json:"author"` CreatedAt time.Time `json:"createdAt"`}
// In-Memory-Speichervar posts = []*Post{ { ID: "1", Title: "Einführung in GraphQL", Content: "GraphQL ist eine Abfragesprache...", Author: "Ivan Petrov", CreatedAt: time.Now(), },}
// Resolver für Query.postsfunc (r *queryResolver) Posts(ctx context.Context) ([]*Post, error) { return posts, nil}
// Resolver für Query.postfunc (r *queryResolver) Post(ctx context.Context, id string) (*Post, error) { for _, post := range posts { if post.ID == id { return post, nil } } return nil, nil}
// Resolver für Mutation.createPostfunc (r *mutationResolver) CreatePost(ctx context.Context, input PostInput) (*Post, error) { newPost := &Post{ ID: fmt.Sprintf("%d", len(posts)+1), Title: input.Title, Content: input.Content, Author: input.Author, CreatedAt: time.Now(), } posts = append(posts, newPost) Auch in der Bibliothek
Elasticsearch C++-Client: Vollständiger Leitfaden für die Arbeit mit der Suchmaschine
Rust-Anwendungsüberwachung: Die Bibliothek `tracing`