𝗕𝘂𝗶𝗹𝗱𝗶𝗻𝗴 𝗠𝘆 𝗙𝗶𝗿𝘀𝘁 𝗥𝗲𝗮𝗹 𝗔𝗣𝗜 𝗶𝗻 𝗚𝗼 𝘄𝗶𝘁𝗵 𝗚𝗶𝗻

Ich gehe von der Theorie zur Praxis über.

Nachdem ich mich mit Structs, Interfaces, Goroutines und Error Handling beschäftigt habe, habe ich eine funktionierende Orders-API mit Go und dem Gin-Framework erstellt.

Die API übernimmt drei Aufgaben:

  • Eine Bestellung erstellen
  • Eine Bestellung nach ID abrufen
  • Alle Bestellungen auflisten

Ich habe mich für Gin entschieden, weil es das Routing und Middleware vereinfacht. Es bietet Hilfsfunktionen wie c.JSON und c.AbortWithStatusJSON. Diese Tools reduzieren redundanten Code.

Projektstruktur: Ich habe ein flaches Package-Layout verwendet, um die Übersicht zu behalten:

  • handler: Verwaltet die HTTP-Logik.
  • model: Definiert die Datenstrukturen.
  • store: Übernimmt die Datenspeicherung.
  • middleware: Verwaltet Logging und Anfragen.

Wichtige technische Entscheidungen:

• Datenvalidierung Ich habe Struct-Tags für die JSON-Serialisierung verwendet. Außerdem habe ich Gin-Binding-Tags genutzt. Dies stellt sicher, dass erforderliche Felder vorhanden sind und Beträge größer als Null sind.

• Persistenz und Nebenläufigkeit Die aktuelle Version verwendet einen In-Memory-Store. Ich habe sync.RWMutex verwendet, um den gleichzeitigen Zugriff zu verwalten. Dies ermöglicht mehrere Lesezugriffe, hält aber Schreibzugriffe sicher.

• Interfaces Der Handler hängt vom OrderStore-Interface ab. Es spielt keine Rolle, ob die Daten im Speicher oder in einer Datenbank liegen. Das macht den Austausch der Speicherschicht einfach.

• Fehlerbehandlung Ich habe errors.Is verwendet, um auf spezifische Fehler wie ErrNotFound zu prüfen. Dadurch kann die API dem Benutzer einen korrekten 404-Statuscode zurückgeben.

• Middleware Ich habe einen benutzerdefinierten Logger erstellt. Er protokolliert die Methode, den Pfad, den Statuscode und die Dauer der Anfrage.

Dieses Setup vereint alles, was in den vorherigen Teilen gelernt wurde. Es ist eine funktionale, strukturierte und skalierbare Grundlage.

Wie strukturierst du deine Go-Projekte? Bevorzugst du flache Packages oder eine tiefe, domänenorientierte Verschachtelung?

Quelle: https://dev.to/mihirmohapatra/building-my-first-real-api-in-go-with-gin-3kio