Heim >Backend-Entwicklung >Golang >So schreiben Sie APIs wie ein Profi in Go mit GopherLight
GopherLIght
Hey Leute, zunächst möchte ich euch dafür danken, dass ihr euch für die Nutzung unseres Projekts entschieden habt. Auch wenn er noch klein ist, haben wir es mit großer Begeisterung gemacht! Um es verwenden zu können, muss go zunächst installiert sein. Gehen wir davon aus, dass Sie es bereits haben. Installieren Sie dann die Hauptmodule des Frameworks, nämlich req und router
go get github.com/BrunoCiccarino/GopherLight/router go get github.com/BrunoCiccarino/GopherLight/req
Bereits heruntergeladen? Puh! Jetzt können wir unsere erste Hallo-Welt erschaffen.
package main import ( "fmt" "github.com/BrunoCiccarino/GopherLight/router" "github.com/BrunoCiccarino/GopherLight/req" ) func main() { app := router.NewApp() // Define a route that responds to a GET request at "/hello". app.Get("/hello", func(r *req.Request, w *req.Response) { w.Send("Hello, World!") }) fmt.Println("Server listening on port 3333") app.Listen(":3333") }
Ganz einfach, oder? Und mit GopherLight können wir noch viel mehr tun. Lesen Sie weiter, um eine vollständige Aufschlüsselung der HTTP-Methoden und unserer Anfrage- und Antworttools zu erhalten.
Unterstützte HTTP-Methoden
Hier ist die Liste der HTTP-Methoden, die Sie mit router.App verwenden können. Mit jedem davon können Sie Routen einrichten, um verschiedene Arten von Anfragen zu bearbeiten. Lasst uns eintauchen!
Ruft Daten ab, ohne etwas zu ändern.
Beispiel: Abrufen einer Artikelliste oder Lesen von Benutzerdetails.
Sendet Daten, um eine neue Ressource zu erstellen.
Beispiel: Senden eines Formulars oder Hinzufügen eines neuen Elements zu einer Liste.
Verwendung: app.Put(path, handler)
Aktualisiert oder ersetzt eine Ressource. Es handelt sich um eine „Überschreiben“-Aktion.
Beispiel: Aktualisieren eines vollständigen Benutzerprofils.
Verwendung: app.Delete(path, handler)
Löscht eine Ressource.
Beispiel: Entfernen eines Benutzers oder Löschen eines Beitrags.
Verwendung: app.Patch(path, handler)
Aktualisiert eine Ressource teilweise, ohne alles zu ersetzen.
Beispiel: Nur die E-Mail in einem Benutzerprofil aktualisieren.
Verwendung: app.Options(path, handler)
Gibt zulässige HTTP-Methoden für eine URL zurück, hauptsächlich für CORS-Preflight-Anfragen.
Verwendung: app.Head(path, handler)
Wie GET, aber kein Antworttext. Verwenden Sie es, um zu überprüfen, ob eine Ressource vorhanden ist.
Verwendung: app.Connect(path, handler), app.Trace(path, handler)
Erweiterte Methoden: CONNECT richtet einen Tunnel ein (für SSL) und TRACE dient zum Debuggen und gibt die Anfrage zurück.
Nachdem Sie nun die Routen gesehen haben, sprechen wir über die Request- und Response-Objekte, Ihre bevorzugten Helfer für die Bearbeitung eingehender Anfragen und das Senden von Antworten.
Jeder Anforderungshandler erhält ein Anforderungsobjekt, das mit Informationen zur eingehenden Anforderung geladen wird. Folgendes können Sie damit machen:
go get github.com/BrunoCiccarino/GopherLight/router go get github.com/BrunoCiccarino/GopherLight/req
Das Response-Objekt hilft Ihnen, eine Antwort an den Client zurückzusenden. Folgendes können Sie tun:
package main import ( "fmt" "github.com/BrunoCiccarino/GopherLight/router" "github.com/BrunoCiccarino/GopherLight/req" ) func main() { app := router.NewApp() // Define a route that responds to a GET request at "/hello". app.Get("/hello", func(r *req.Request, w *req.Response) { w.Send("Hello, World!") }) fmt.Println("Server listening on port 3333") app.Listen(":3333") }
Wir halten eine Reihe von Middlewares für Sie bereit, mit denen Sie Ihrer Go-Web-App einige wichtige Funktionen hinzufügen können. Jede dieser Middlewares bringt ihre eigene Magie mit sich – Sicherheit, Protokollierung, Zeitüberschreitungen und mehr! Lassen Sie uns sie einzeln aufschlüsseln. ?
Unsere AuthMiddleware hilft, Ihre Routen mit JSON Web Tokens (JWT) zu schützen. Es ist flexibel und ermöglicht Ihnen die individuelle Anpassung des geheimen Schlüssels, der Fehlerbehandlung und der Token-Extraktionsmethode.
Einrichtung
Konfigurieren Sie zunächst Ihre JWT-Einstellungen mit JWTConfig:
app.Get("/greet", func(r *req.Request, w *req.Response) { name := r.QueryParam("name") if name == "" { name = "stranger" } w.Send("Hello, " + name + "!") })
Müssen Cross-Origin-Anfragen zugelassen werden? Kein Problem! Unsere CORSMiddleware konfiguriert die Cross-Origin Resource Sharing (CORS)-Einstellungen, um Ihre API von anderen Domänen aus zugänglich zu machen.
Konfigurationsoptionen
app.Get("/user", func(r *req.Request, w *req.Response) { user := map[string]string{"name": "Gopher", "language": "Go"} w.JSON(user) })
Unsere CSRFMiddleware schützt vor Cross-Site Request Forgery, indem sie ein CSRF-Token validiert, das mit jeder Anfrage gesendet wird. Verwenden Sie GenerateCSRFToken(), um ein sicheres Token zu erstellen, und validieren Sie es dann mit Ihrer eigenen isValidToken-Funktion.
import ( "github.com/BrunoCiccarino/GopherLight/middleware" ) config := middleware.JWTConfig{ SecretKey: []byte("your_secret_key"), } app.Use(middleware.NewAuthMiddleware(config))
Und vergessen Sie nicht, Token zu generieren mit:
go get github.com/BrunoCiccarino/GopherLight/router go get github.com/BrunoCiccarino/GopherLight/req
Möchten Sie den Überblick behalten, was auf Ihrem Server passiert? LoggingMiddleware protokolliert jede Anfrage, einschließlich der Methode, des Pfads und der benötigten Zeit. Dies ist eine großartige Möglichkeit, über die App-Leistung und ungewöhnliche Aktivitäten auf dem Laufenden zu bleiben.
package main import ( "fmt" "github.com/BrunoCiccarino/GopherLight/router" "github.com/BrunoCiccarino/GopherLight/req" ) func main() { app := router.NewApp() // Define a route that responds to a GET request at "/hello". app.Get("/hello", func(r *req.Request, w *req.Response) { w.Send("Hello, World!") }) fmt.Println("Server listening on port 3333") app.Listen(":3333") }
Jede Anfrage wird wie folgt protokolliert:
Vermeiden Sie diese endlosen Wartezeiten, indem Sie mit TimeoutMiddleware Zeitlimits für die Anfrageverarbeitung festlegen. Diese Middleware bricht die Anfrage ab, wenn sie nicht rechtzeitig abgeschlossen wird, und sendet einen 504-Gateway-Timeout-Status an den Client.
app.Get("/greet", func(r *req.Request, w *req.Response) { name := r.QueryParam("name") if name == "" { name = "stranger" } w.Send("Hello, " + name + "!") })
Die Plugin-Oberfläche ist supereinfach, aber superleistungsstark. Es gibt Ihnen eine einzige Methode: Registrieren. Dadurch können Sie sich in das Routing-System der App einklinken, um alle benötigten Routen hinzuzufügen – sei es ein neuer API-Endpunkt, ein Webhook oder alles andere, was Sie sich vorstellen können.
Die Registrierungsmethode
Hier ist der magische Teil der Plugin-Schnittstelle:
app.Get("/user", func(r *req.Request, w *req.Response) { user := map[string]string{"name": "Gopher", "language": "Go"} w.JSON(user) })
Die Register-Methode akzeptiert eine Routenfunktion, mit der Sie neue Routen in Ihrem Plugin definieren können, indem Sie Folgendes angeben:
Angenommen, Sie möchten ein Plugin erstellen, das einen einfachen Endpunkt unter /hello-plugin hinzufügt, um Benutzer zu begrüßen. So würde das Plugin aussehen:
import ( "github.com/BrunoCiccarino/GopherLight/middleware" ) config := middleware.JWTConfig{ SecretKey: []byte("your_secret_key"), } app.Use(middleware.NewAuthMiddleware(config))
Um ein Plugin zu laden, erstellen Sie einfach eine Instanz und rufen Sie Registrieren in Ihrem Haupt-App-Setup auf:
corsOptions := middleware.CORSOptions{ AllowOrigin: "*", AllowMethods: []string{"GET", "POST"}, } app.Use(middleware.CORSMiddleware(corsOptions))
Jedes Plugin kann so viele Routen wie nötig hinzufügen. Rufen Sie route einfach mehrmals in Ihrer Register-Funktion auf, um zusätzliche Endpunkte zu definieren. Verwenden Sie verschiedene HTTP-Methoden, Pfade und Handler, um die Funktionalität Ihres Plugins nach Ihren Wünschen zu gestalten.
Das obige ist der detaillierte Inhalt vonSo schreiben Sie APIs wie ein Profi in Go mit GopherLight. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!