GraphQL in Go: Vollständiger Leitfaden zur Bibliothek gqlgen

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

Bibliothek gqlgen für Go (Golang): Erstellung einer GraphQL-API



GraphQL hat sich aufgrund seiner Flexibilität und Effizienz zum De-facto-Standard für die Erstellung moderner APIs entwickelt. Im Go-Ökosystem (Golang) ist gqlgen eine der leistungsstärksten und beliebtesten Bibliotheken für die Arbeit mit GraphQL. Sie bietet Entwicklern eine bequeme Möglichkeit, Schemata zu definieren, automatische Generierung von Boilerplate-Code und hohe Leistung.



Was ist gqlgen und warum sollte man es wählen?



gqlgen (steht für "graphql generator") ist eine Bibliothek für Go, die einen GraphQL-Server auf Basis eines Schemas erstellt. Ihr Hauptmerkmal ist der Code-First-Ansatz: Sie beschreiben das Schema in einer .graphql-Datei, und die Bibliothek generiert den gesamten benötigten Go-Code (Strukturen, Schnittstellen für Resolver). Dies erspart das mühsame Schreiben von Boilerplate-Code und reduziert die Fehlerwahrscheinlichkeit.



Wichtige Vorteile:

  • Automatische Codegenerierung: Aus dem Schema werden Typen, Methoden und Resolver-Schnittstellen erstellt.
  • Typsicherheit: Alle Typen werden zur Kompilierzeit von Go überprüft.
  • Leistung: Die Bibliothek ist für den Einsatz in hochbelasteten Systemen optimiert.
  • Unterstützung von Subscriptions: Möglichkeit zur Implementierung von Echtzeit-Funktionalität über WebSocket.
  • Flexibilität: Einfache Integration mit Datenbanken, Caches und anderen Diensten.


Installation und Konfiguration



Um zu beginnen, müssen Sie gqlgen installieren und das Projekt initialisieren:



// Bibliothek installierengo get github.com/99designs/gqlgen@latest

// Projektskelett initialisierengo run github.com/99designs/gqlgen init


Nach Ausführung des Befehls init wird die Projektstruktur erstellt:

  • graph/schema.graphqls — Datei mit dem Schema.
  • graph/resolver.go — Root-Resolver.
  • graph/schema.resolvers.go — Generierte Platzhalter für Resolver.
  • server.go — Einstiegspunkt zum Starten des Servers.


Definition des GraphQL-Schemas



In der Datei schema.graphqls werden Typen, Abfragen und Mutationen beschrieben. Beispielschema für ein Blog-System:



# Definition des User-Typstype User {  id: ID!  name: String!  email: String!  posts: [Post!]!}

# Definition des Post-Typstype Post { id: ID! title: String! content: String! author: User!}

# Root-Query-Typtype Query { user(id: ID!): User users: [User!]! post(id: ID!): Post posts: [Post!]!}

# Root-Mutation-Typtype Mutation { createUser(name: String!, email: String!): User! createPost(title: String!, content: String!, authorId: ID!): Post!}


Codegenerierung und Implementierung von Resolvern



Nach der Beschreibung des Schemas starten wir die Codegenerierung:



go run github.com/99designs/gqlgen generate


Die Bibliothek erstellt Dateien mit Go-Strukturen und Schnittstellen. Jetzt müssen die Resolver implementiert werden – Funktionen, die Daten zurückgeben. Beispiel einer Resolver-Implementierung zum Abrufen eines Benutzers:



// graph/schema.resolvers.go (Implementierungsbeispiel)func (r *queryResolver) User(ctx context.Context, id string) (*model.User, error) {    // Logik zum Abrufen des Benutzers aus der DB    user, err := r.db.GetUserByID(ctx, id)    if err != nil {        return nil, err    }    return user, nil}

func (r *queryResolver) Users(ctx context.Context) ([]*model.User, error) { // Logik zum Abrufen der Liste aller Benutzer return r.db.GetAllUsers(ctx)}

// Resolver für das Feld posts bei User (Auflösung verschachtelter Daten)func (r *userResolver) Posts(ctx context.Context, obj *model.User) ([]*model.Post, error) { // obj ist das User-Objekt, für das die Beiträge angefordert werden

Empfehlungen