GraphQL-Bibliothek für Go (Golang) – vollständiger Leitfaden

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

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 init


Der 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.mod


Schreiben 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 Time


Code-Generierung



Nachdem Sie das Schema beschrieben haben, führen Sie aus:



go run github.com/99designs/gqlgen generate


Dies 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)

Empfehlungen