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 von Facebook entwickelt wurde. Im Gegensatz zu REST, wo jeder Endpunkt eine feste Datenstruktur zurückgibt, erlaubt GraphQL dem Client, nur die Felder anzufragen, die er benötigt. Dies reduziert die Anzahl der Anfragen und die Menge der übertragenen Daten. Go (Golang) ist eine ausgezeichnete Wahl für die Erstellung leistungsstarker APIs aufgrund seiner Geschwindigkeit, statischen Typisierung und integrierten Unterstützung für Nebenläufigkeit.



In diesem Tutorial erstellen wir eine einfache GraphQL-API in Go zur Verwaltung einer Bücherliste. Sie lernen, wie Sie einen Server einrichten, ein Schema definieren, Resolver schreiben und Abfragen und Mutationen ausführen.



Projekt einrichten und Bibliotheken installieren



Go-Modul initialisieren



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


Bibliothek graphql-go installieren



Wir verwenden die beliebte Bibliothek graphql-go/graphql. Installieren Sie sie mit dem Befehl:



go get github.com/graphql-go/graphqlgo get github.com/graphql-go/handler


Die erste Bibliothek stellt den GraphQL-Kern bereit, die zweite einen HTTP-Handler für die Integration mit dem Webserver.



Datenstruktur und GraphQL-Schema erstellen



Typ Book definieren



Erstellen Sie die Datei main.go und beginnen Sie mit der Definition der Buch-Datenstruktur und des entsprechenden GraphQL-Typs:



package main

import ( "github.com/graphql-go/graphql" "github.com/graphql-go/handler" "net/http")

// Book — Datenstruktur für ein Buchtype Book struct { ID string `json:"id"` Title string `json:"title"` Author string `json:"author"` Year int `json:"year"`}

// Definieren des GraphQL-Typs für ein Buchvar bookType = graphql.NewObject( graphql.ObjectConfig{ Name: "Book", Fields: graphql.Fields{ "id": &graphql.Field{Type: graphql.String}, "title": &graphql.Field{Type: graphql.String}, "author": &graphql.Field{Type: graphql.String}, "year": &graphql.Field{Type: graphql.Int}, }, },)


Root-Query erstellen



Fügen wir einen In-Memory-Bücherspeicher und einen Root-Query hinzu, um die Liste und ein einzelnes Buch abzurufen:



// Simulierte Datenbankvar books = []Book{    {ID: "1", Title: "Krieg und Frieden", Author: "Lew Tolstoi", Year: 1869},    {ID: "2", Title: "Verbrechen und Strafe", Author: "Fjodor Dostojewski", Year: 1866},    {ID: "3", Title: "Der Meister und Margarita", Author: "Michail Bulgakow", Year: 1967},}

// Root-Queryvar queryType = graphql.NewObject( graphql.ObjectConfig{ Name: "Query", Fields: graphql.Fields{ "books": &graphql.Field{ Type: graphql.NewList(bookType), Resolve: func(p graphql.ResolveParams) (interface{}, error) { return books, nil }, }, "book": &graphql.Field{ Type: bookType, Args: graphql.FieldConfigArgument{ "id": &graphql.ArgumentConfig{Type: graphql.String}, }, Resolve: func(p graphql.ResolveParams) (interface{}, error) { id, _ := p.Args["id"].(string) for _, book := range books { if book.ID == id { return book, nil } } return nil, nil }, }, }, },)


Mutationen hinzufügen



Mutationen ermöglichen das Ändern von Daten. Fügen wir die Möglichkeit hinzu, neue Bücher hinzuzufügen:



// Mutation zum Hinzufügen eines Buchesvar mutationType = graphql.NewObject(

Blogs

Buchempfehlungen