Heim >Backend-Entwicklung >Golang >Elegante Implementierung der Golang REST API-Architektur

Elegante Implementierung der Golang REST API-Architektur

Guanhui
Guanhuinach vorne
2020-06-17 17:48:334197Durchsuche

Elegante Implementierung der Golang REST API-Architektur

Es gibt ein Sprichwort, dass die in Golang geschriebene API nicht so einfach und universell sein kann wie andere Sprachen. Aber in Wirklichkeit bin ich auf viel REST-API-Code mit vielen Abstraktionen gestoßen, was die Codebasis verwirrend und komplex machte und letztendlich die Lesbarkeit und Wartbarkeit beeinträchtigte.

In dieser Serie erfahren Sie, wie Sie eine REST-API-TODO-Liste auf Produktebene erstellen, eine nachhaltige Erweiterungsarchitektur, beginnend mit Routing- und Codeschnittstellen, dann das Hinzufügen einer Mongo-Datenbank und einer Badger-Datenschicht dann Ist die Autorisierungsprotokollschicht (OAuth 2.0)

In dieser Serie verwenden wir Chi-Routing.

Elegante Implementierung der Golang REST API-Architektur

Warum Chi anstelle der Standardbibliothek oder Gin oder Router-x für das Routing verwenden?

Nun, eigentlich spielt es keine Rolle, wofür Sie sich entscheiden. Unabhängig davon, was Sie für das Routing verwenden, werden die in dieser Serie besprochenen Konzepte nützlich sein. Aber es gibt die folgenden Vorteile, die mich glauben lassen, dass Chi-Router den meisten Alternativen überlegen ist:

  • und net/http 100 % kompatibel mit der Standardbibliothek --- verfügbar im Go-Ökosystem Verwenden Sie jedes Net/http-kompatible http- oder Middleware-Paket 🎜>

  • Keine externen Abhängigkeiten --- Purely Go 1.7+ stdlib + net / http

  • Leistungsstark - -- Viele Unternehmen nutzen es, zum Beispiel: Pressly, CloudFlare, Heroku, 99Designs

  • Lightweight --- getaktet in ~1000 LOC für den Chi-Router

  • Es ist schnell

  • Was mir am besten gefällt, ist, dass alte http-Handler und Middleware, die Sie für andere Net/http-kompatible Router geschrieben haben, immer noch einwandfrei funktionieren.

    Lass uns anfangen
Zuerst erstellen wir ein main.go . Die Grundlage (oder zentrale Komponente?) unseres Programms

Der obige Code steht im Mittelpunkt einiger Best Practices

Elegante Implementierung der Golang REST API-ArchitekturVerwenden Sie ein separates Paket Implementieren Sie die Routing-Logik, gruppieren Sie sie und mounten Sie sie dann:

r.Mount("/api/todo", todo.Routes())
  1. Überprüfen Sie die API So können Sie die API aktualisieren, ohne alte Clients zu beschädigen:

router.Route("/v1", .... )
  1. Verwenden Sie Middleware als Erweiterung. Code, der viel Routing verwendet, ist tatsächlich sehr umständlich und kann in Link-Middleware umgewandelt werden, z. B. Autorisierung, Festlegen von Antwortheadern, Komprimierung, Anforderungsprotokolle, Ratenbegrenzung usw.

Der Autor (basierend auf den von Ajinkya in den Kommentaren erwähnten Problemen werde ich näher auf die Gehmethode eingehen):
  1. Chi-Routing hat eine Methode namens Gehen. Von dieser Methode empfangene Parameter:

Ein Router

  • Ein Rückruf.

  • Jeder Rückruf Alle Definierte Routen werden zurückgerufen und erhalten 4 Parameter:

Routendefinitionsmethode

  • String der tatsächlichen Route

  • Prozessor (Funktion), verarbeitet Anfragen für eine bestimmte Route

  • Liste der in einer bestimmten Route definierten Middleware (Middleware ist eine relativ einfache Funktion, die zuvor aufgerufen wird Der Handler wird aufgerufen, sodass sie vor der Anforderungsverarbeitung, Autorisierung usw. verwendet werden.)

  • In meinem Fall frage ich einfach Routen ab und drucke alle definierten Routen aus. Dadurch erhalte ich einen Überblick über alle verfügbaren Routen.

    Als nächstes erstellen wir ein Todo-Paket, das tatsächlich unsere Todo-Logik speichert.

Notizen

Elegante Implementierung der Golang REST API-Architektur

Das todo-Paket verfügt über eine Methode, die alle Routen zurückgibt. Diese Routen werden in die Datei main.go geschrieben. Tatsächlich schreibe ich diese Routen normalerweise in eine Datei namens

routes.go,

damit sie im Paket leicht zu finden ist
    .
  • Der Handler hat die Funktionssignatur , was bedeutet, dass sich der Handler nicht von der Art und Weise unterscheidet, wie Sie net/http mit der Standardbibliothek schreiben.

  • Verwenden Sie render.JSON, einen Encoding/JSON-Wrapper, der automatisch den gesamten HTML-Code in Ihrer JSON-Antwort maskiert und den Inhaltstyp auf application/json setztfunc (w http.ResponseWriter,r *http.Request) 

  • Haben Sie Angst davor, wie einfach es ist? Sie können dieses Projekt auf GitHub ansehen https://github.com/tonyalaribe/todoapi/tre....

    In unserem nächsten Artikel dieser Reihe werden wir weiterhin die Konfiguration und den gemeinsamen Status unterstützen. Die meisten Projekte erfordern normalerweise zusätzliche Konfigurationen, z. B. Datenbankverbindungen usw. Wir werden dies im nächsten Artikel besprechen.

    Empfohlenes Tutorial: „Go Tutorial

Das obige ist der detaillierte Inhalt vonElegante Implementierung der Golang REST API-Architektur. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen