GraphQL API mit Go: Schritt-für-Schritt-Tutorial für Anfänger

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

Einführung in GraphQL und Go

GraphQL ist eine Abfragesprache für APIs, die es Clients ermöglicht, genau die Daten zu erhalten, die sie benötigen, und nichts Überflüssiges. Im Gegensatz zu REST, wo jeder Endpunkt eine feste Datenstruktur zurückgibt, bietet GraphQL Flexibilität und Kontrolle. In Kombination mit Go (Golang) – einer schnellen, typsicheren und einfachen Sprache – erhalten Sie ein leistungsstarkes Werkzeug zur Erstellung moderner Webdienste.

In diesem Tutorial erstellen wir eine einfache GraphQL API in Go von Grund auf. Sie lernen, Abhängigkeiten zu installieren, ein Schema zu beschreiben, Resolver zu implementieren und einen Server zu starten. Der Artikel richtet sich an Anfänger, daher werden alle Schritte ausführlich erklärt.



1. Projektvorbereitung und Installation der Abhängigkeiten

Bevor Sie Code schreiben, stellen Sie sicher, dass Go Version 1.18 oder höher installiert ist. Erstellen Sie ein neues Verzeichnis für das Projekt und initialisieren Sie das Modul:

mkdir graphql-go-tutorialcd graphql-go-tutorialgo mod init graphql-go-tutorial


Bibliotheksauswahl: gqlgen

Es gibt mehrere Bibliotheken für die Arbeit mit GraphQL in Go. Wir verwenden gqlgen – einen beliebten Code-Generator, der Typen und Resolver basierend auf dem Schema erstellt. Installieren Sie ihn:

go get github.com/99designs/gqlgen@latest


Initialisierung von gqlgen

Führen Sie den Befehl aus, um die Standarddateien zu erstellen:

go run github.com/99designs/gqlgen init

Dieser Befehl erstellt mehrere Dateien:

  • graph/schema.graphqls – die GraphQL-Schemadatei;
  • graph/resolver.go – der Resolver-Rahmen;
  • server.go – der Einstiegspunkt des Servers;
  • gqlgen.yml – die Generierungskonfiguration.


2. Beschreibung des GraphQL-Schemas

Öffnen Sie die Datei graph/schema.graphqls. Standardmäßig gibt es dort bereits ein Beispiel mit dem Typ Todo. Wir werden es erweitern, indem wir den Typ User und einige Abfragen hinzufügen.

Ersetzen Sie den Inhalt der Datei durch Folgendes:

type User {    id: ID!    name: String!    email: String!}

type Todo { id: ID! text: String! done: Boolean! user: User!}

type Query { todos: [Todo!]! users: [User!]! user(id: ID!): User}

type Mutation { createTodo(text: String!, userId: ID!): Todo! markDone(id: ID!): Todo!}

Hier haben wir definiert:

  • User – ein Benutzer mit den Feldern id, name, email.
  • Todo – eine Aufgabe mit den Feldern id, text, done und einem Verweis auf den Benutzer.
  • Query – Einstiegspunkte zum Lesen von Daten.
  • Mutation – Operationen zum Ändern von Daten.


3. Codegenerierung und Implementierung der Resolver

Nach der Beschreibung des Schemas muss der Go-Code generiert werden. Führen Sie aus:

go run github.com/99designs/gqlgen generate

Dies erstellt die Datei models_gen.go und aktualisiert resolver.go. Öffnen Sie nun graph/resolver.go.



Hinzufügen eines Datenspeichers

Der Einfachheit halber speichern wir die Daten im Arbeitsspeicher. Fügen Sie die Struktur in resolver.go hinzu:

type Resolver struct {    Users []*model.User    Todos []*model.Todo}

Vergessen Sie nicht, das Paket model zu importieren.



Implementierung der Abfragen (Query)

Suchen Sie die generierten Methoden für Query. Implementieren wir sie:

func (r *queryResolver) Todos(ctx context.Context) ([]*model.Todo, error) {    return r.Resolver.Todos, nil}

func (r *queryResolver) Users(ctx context.Context) ([]*model.User, error) { return r.Resolver.Users, nil}

func (r *queryResolver) User(ctx context.Context, id string) (*model.User, error) { for _, u := range r.Resolver.Users { if u.ID == id { return u, nil } } return nil, fmt.Errorf("user not found")}

Blogs

Buchempfehlungen