Wie man in 30 Minuten ein REST API in Go schreibt: Schritt-für-Schritt-Anleitung

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

Einleitung: Warum Go ideal für REST APIs ist



Go (oder Golang) ist eine moderne, kompilierte Programmiersprache, die bei Google entwickelt wurde. Sie vereint die Leistung von C++ mit der Einfachheit von Python, was sie zur idealen Wahl für die Erstellung hochbelastbarer Webdienste und REST APIs macht. Im Gegensatz zu vielen anderen Sprachen bietet Go integrierte Unterstützung für HTTP-Server, Multithreading und schnelle Kompilierung.



In dieser Anleitung erstellen wir Schritt für Schritt eine vollwertige REST API zur Verwaltung einer Aufgabenliste (Todo List). Sie lernen:

  • Einen HTTP-Server in Go einzurichten
  • Mit JSON-Anfragen und -Antworten zu arbeiten
  • CRUD-Operationen (Create, Read, Update, Delete) zu implementieren
  • Die API mit curl oder Postman zu testen


Der gesamte Vorgang dauert nicht länger als 30 Minuten. Los geht's!



1. Installation und Projekteinrichtung



Bevor wir Code schreiben, stellen Sie sicher, dass Go installiert ist. Überprüfen können Sie dies mit dem Befehl:

go version


Wenn Go nicht installiert ist, laden Sie die neueste Version von der offiziellen Website herunter.



Erstellen Sie ein neues Verzeichnis für das Projekt und initialisieren Sie das Modul:

mkdir go-rest-apicd go-rest-apigo mod init go-rest-api


Erstellen Sie nun die Datei main.go – darin wird der gesamte Code stehen. Für die Routenverwaltung verwenden wir die Standardbibliothek net/http, die bereits in Go integriert ist. Es sind keine externen Abhängigkeiten erforderlich – das ist einer der Hauptvorteile der Sprache.



2. Datenstruktur und Speicher definieren



Beginnen wir mit der Beschreibung des Datenmodells. Der Einfachheit halber speichern wir Aufgaben im Arbeitsspeicher (in einem Slice) und nicht in einer Datenbank. Erstellen wir die Struktur Task und einen globalen ID-Zähler:



package main

import ( "encoding/json" "log" "net/http" "strconv" "strings" "sync")

// Task repräsentiert eine Aufgabetype Task struct { ID int `json:"id"` Title string `json:"title"` Done bool `json:"done"`}

// Aufgabenspeicher (im Arbeitsspeicher)var ( tasks []Task nextID int = 1 mu sync.Mutex)


Beachten Sie sync.Mutex – es wird für den threadsicheren Zugriff auf die Daten benötigt, da der Go-Server Anfragen parallel verarbeiten kann.



3. Implementierung der CRUD-Operationen



Jetzt schreiben wir die wichtigsten Handler für jede HTTP-Methode. Wir verwenden das URL-Routing-Muster:

  • GET /tasks – alle Aufgaben abrufen
  • POST /tasks – eine neue Aufgabe erstellen
  • GET /tasks/{id} – eine Aufgabe nach ID abrufen
  • PUT /tasks/{id} – eine Aufgabe aktualisieren
  • DELETE /tasks/{id} – eine Aufgabe löschen


3.1. Alle Aufgaben abrufen (GET /tasks)

func getTasks(w http.ResponseWriter, r *http.Request) {    mu.Lock()    defer mu.Unlock()

w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(tasks)}


3.2. Aufgabe erstellen (POST /tasks)

func createTask(w http.ResponseWriter, r *http.Request) {    var newTask Task    if err := json.NewDecoder(r.Body).Decode(&newTask); err != nil {        http.Error(w, "Invalid JSON", http.StatusBadRequest)        return    }

mu.Lock() newTask.ID = nextID nextID++ tasks = append(tasks, newTask) mu.Unlock()

w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusCreated) json.NewEncoder(w).Encode(newTask)}


3.3. Abrufen, Aktualisieren und Löschen nach ID

Für diese Operationen müssen wir die ID aus der URL extrahieren. Die Go-Standardbibliothek hat keinen integrierten Pfadparser, daher schreiben wir ein einfaches Hilfsprogramm:



                

Blogs

Buchempfehlungen