Wie man in 30 Minuten eine REST API in Go schreibt: Ein Leitfaden 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

Einleitung: Warum Go die ideale Wahl für REST APIs ist

Go (oder Golang) ist eine kompilierte Programmiersprache von Google, die die Leistung von C++ mit der Einfachheit von Python kombiniert. Wenn Sie eine schnelle, zuverlässige und leicht wartbare REST API erstellen möchten, ist Go eine der besten Optionen. In diesem Artikel schreiben wir in 30 Minuten eine vollständige REST API in Go, die Datensätze erstellen, lesen, aktualisieren und löschen kann (CRUD). Keine komplexen Frameworks – nur die Standardbibliothek net/http und ein wenig Code.

Am Ende des Artikels erhalten Sie einen fertigen HTTP-Server, der auf Anfragen im JSON-Format antwortet und ohne externe Abhängigkeiten funktioniert. Los geht's!



Schritt 1: Projekteinrichtung und Struktur

Stellen Sie zunächst sicher, dass Go installiert ist (Version 1.16+). 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

Die Projektstruktur ist einfach – eine Datei main.go. Den gesamten Code platzieren wir darin, um das Beispiel nicht zu verkomplizieren. In realen Projekten würden Sie den Code natürlich in Pakete aufteilen, aber für das Lernen ist dies ideal.



Schritt 2: Datenstruktur und globaler Speicher definieren

Unsere API verwaltet eine Liste von Büchern. Wir erstellen eine Struktur Book und einen einfachen Slice zur Speicherung der Daten im Arbeitsspeicher (anstelle einer Datenbank).

package main

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

type Book struct { ID int `json:"id"` Title string `json:"title"` Author string `json:"author"` Year int `json:"year"`}

var books []Bookvar nextID int = 1

Hier ist books unsere temporäre «Datenschicht» und nextID ein Zähler zur automatischen Vergabe von IDs für neue Bücher.



Schritt 3: HTTP-Anfrage-Handler implementieren (CRUD)

Jetzt kommt der spannende Teil – wir schreiben Handler-Funktionen für jede HTTP-Methode. Wir verwenden den Standard-Router http.NewServeMux.



3.1. Alle Bücher abrufen (GET /books)

func getBooks(w http.ResponseWriter, r *http.Request) {    w.Header().Set("Content-Type", "application/json")    json.NewEncoder(w).Encode(books)}


3.2. Ein neues Buch erstellen (POST /books)

func createBook(w http.ResponseWriter, r *http.Request) {    var newBook Book    if err := json.NewDecoder(r.Body).Decode(&newBook); err != nil {        http.Error(w, "Invalid JSON", http.StatusBadRequest)        return    }    newBook.ID = nextID    nextID++    books = append(books, newBook)    w.Header().Set("Content-Type", "application/json")    w.WriteHeader(http.StatusCreated)    json.NewEncoder(w).Encode(newBook)}


3.3. Ein einzelnes Buch nach ID abrufen (GET /books/{id})

Der Standard-ServeMux unterstützt keine dynamischen Pfade, daher extrahieren wir die ID manuell aus der URL.

func getBook(w http.ResponseWriter, r *http.Request) {    idStr := strings.TrimPrefix(r.URL.Path, "/books/")    id, err := strconv.Atoi(idStr)    if err != nil {        http.Error(w, "Invalid ID", http.StatusBadRequest)        return    }    for _, book := range books {        if book.ID == id {            w.Header().Set("Content-Type", "application/json")            json.NewEncoder(w).Encode(book)            return        }    }    http.Error(w, "Book not found", http.StatusNotFound)}


3.4. Ein Buch aktualisieren (PUT /books/{id})

func updateBook(w http.ResponseWriter, r *http.Request) {    idStr := strings.TrimPrefix(r.URL.Path, "/books/")    id, err := strconv.Atoi(idStr)    if err != nil {        http.Error(w, "Invalid ID", http.StatusBadRequest)        return    }    var updatedBook Book    if err := json.NewDecoder(r.Body).Decode(&updatedBook); err != nil {        h                

Blogs

Buchempfehlungen