Webrouting is een techniek voor het toewijzen van HTTP-verzoeken aan handlerfuncties die werken op het opgegeven URL-pad. Routing wordt vaak gebruikt om single-page applicaties (SPA's) en API's te bouwen. In de router definieert de code de volgorde van acties bij het verzoek van een gebruiker.

De Go-standaardbibliotheek heeft de meeste functionaliteit die u nodig hebt om webapplicaties te bouwen, inclusief routering. U kunt de ServeMux typ de net/http pakket voor basisrouteafhandeling. Als u een complexere routeafhandeling nodig heeft, zijn er tal van routeringspakketten om uit te kiezen.

Aan de slag met routering in Go

Het ecosysteem van Go herbergt routeringspakketten die het onnodige abstraheren en het gemakkelijker maken om webapplicaties en -services te bouwen.

Veel Go-webframeworks implementeren enkele van deze routeringspakketten.

Hier is een eenvoudig structuurmodel voor de JSON antwoord dat u in deze zelfstudie naar de klant terugstuurt.

type Info structureren {
Bericht snaar`json:"bericht"`
Beschrijving snaar`json:"beschrijving"`
}

De meeste Go-routers gebruiken nog steeds de net/http Reactieschrijver en Verzoek methoden als parameters in handlerfuncties.

funcHallo(schrijver http. ResponseWriter, verzoek *http. Verzoek) {
// handler functie bedrijfslogica hier
}

U moet ook een server starten met de LuisterEnServe methode om de server in de meeste pakketten op te starten.

fout := http. LuisterAndServe(":8000", router)

als fout != nul {
opbrengst
}

Hier zijn enkele van de populaire routeringspakketten in het Go-ecosysteem.

1. De Gorilla Mux-router

Het Gorilla Mux-pakket implementeert zowel een request-router als een request-dispatcher voor HTTP-verzoeken. Het is net als de http. ServeMux methode maar met toegevoegde functionaliteit.

De Gorilla Mux-router implementeert de http. Handler interface en zijn methoden zijn compatibel met de ServeMux methode. Het pakket implementeert ook meerdere URL-schema's en u kunt routers gebruiken als subrouters (geneste routes) om vergelijkbare routes te definiëren.

De Gorilla Mux pakket maakt deel uit van de Gorilla-webtoolkit. De toolkit bevat webgerelateerde pakketten om veel problemen op te lossen van: gebruikers ingelogd houden met Sessions tot gegevensopslag met behulp van cookies.

Voer deze opdracht uit in de terminal van uw werkruimte om het Gorilla Mux-pakket te installeren.

Gaan get -u github.com/gorilla/mux

Hier leest u hoe u een KRIJGEN verzoek route naar een handlerfunctie die codeert voor een JSON-antwoord met het Gorilla Mux-pakket.

importeren (
"codering/json"
"github.com/gorilla/mux"
"logboek"
"net/http"
)

funcHallo(schrijver http. ResponseWriter, verzoek *http. Verzoek) {
reactie := Info {
Bericht: "Succes",
Beschrijving: "Je hebt met succes naar de klant geschreven",
}

fout := json. NewEncoder (schrijver). Encode (antwoord)

als fout != nul {
logboek. Fataal (fout)
}
}

funchoofd() {
router := mux. Nieuwe Router()
router. HandleFunc("/hallo", hallo).Methoden("GET")
fout := http. LuisterAndServe(":8000", router)

als fout != nul {
opbrengst
}
}

De Hallo handler-functie codeert de struct naar JSON met behulp van de Coderen methode van de NieuwEncoder structureren.

De hoofd functie wijst een nieuwe Gorilla Mux-routerinstantie toe aan de router variabel. Het roept dan de HandvatFunc methode om de route toe te wijzen aan de handlerfunctie. U kunt de Methoden: methode om een ​​verzoektype op te geven.

2. De Chi-router

De Chi-router is een lichtgewicht, snelle, configureerbare router voor het bouwen van HTTP-gebaseerde webservices in Go. De Chi-router is compatibel met de http pakket, en er zijn geen externe afhankelijkheden voor de router.

In tegenstelling tot veel routers biedt Chi contextcontrole met de context pakket voor tijdige afhandeling van aanvragen.

Installeer de Chi-router op je Go-modules met deze opdracht.

Gaan krijg github.com/Gaan-chi/chi

Routing met de Gorilla Mux-router en de Chi-router lijkt erg op elkaar. Hier leest u hoe u een soortgelijke kunt instellen KRIJGEN verzoek dat struc codeert voor JSON als antwoord.

importeren (
"codering/json"
"github.com/Gaan-chi/chi/v5"
"logboek"
"net/http"
)

funchoofd() {
router := chi. Nieuwe Router()
router. Get("/hallo", hallo)
fout := http. LuisterAndServe(":8000", router)

als fout != nul {
opbrengst
}
}

funcHallo(schrijver http. ResponseWriter, verzoek *http. Verzoek) {
reactie := Info {
Bericht: "Succes",
Beschrijving: "Je hebt met succes naar de klant geschreven",
}

fout := json. NewEncoder (schrijver). Encode (antwoord)

als fout != nul {
logboek. Fataal (fout)
}
}

De Hallo handlerfunctie is de handlerfunctie voor de KRIJGEN verzoek.

In de hoofd functie, de router variabele is een instantie van de Chi-router. U kunt een aanvraagmethode specificeren met de methodenaam; in dit geval, Krijgen neemt de route- en handlerfunctie-ID op als parameters.

3. Het HttpRouter-pakket

De HttpRouter package is een zeer performante, lichtgewicht multiplexer voor aanvragen. Het biedt meer functionaliteit dan de ServeMux implementatie van het http-pakket.

Het HttpRouter-pakket heeft een kleine geheugenvoetafdruk, hoge prestaties en goede schaalbaarheid. Het is een van de oudste en meest gebruikte routers in het Go-ecosysteem, geïmplementeerd in vele populaire Go-frameworks, inclusief de Gin-bibliotheek.

Als u deze opdracht uitvoert op de terminal van uw werkmap, wordt het HttpRouter-pakket geïnstalleerd.

Gaan download github.com/julienschmidt/httprouter

Routing met de HttpRouter wijkt iets af van de Chi en Gorilla Mux routers.

Hier leest u hoe u een eenvoudig GET-verzoek kunt instellen met het HttpRouter-pakket.

importeren (
"codering/json"
"github.com/julienschmidt/httprouter"
"logboek"
"net/http"
)

funchoofd() {
router := httprouter. Nieuw()
router. GET("/hallo", hallo)
fout := http. LuisterAndServe(":8000", router)

als fout != nul {
opbrengst
}
}

funcHallo(schrijver http. ResponseWriter, verzoek *http. Verzoek, _ httprouter. parameters) {
reactie := Info {
Bericht: "Succes",
Beschrijving: "Je hebt met succes het API-eindpunt bereikt",
}

fout := json. NewEncoder (schrijver). Encode (antwoord)

als fout != nul {
logboek. Fataal (fout)
}
}

Handlerfuncties voor het HttpRouter-pakket moeten de. hebben params methode van de HTTP-router.

De router variabele is een instantie van HttpRouter. U kunt een GET-verzoek instellen met de KRIJGEN methode die de route en de handlerfunctie-ID inneemt.

4. De Pat-router

Pat is een HTTP-verzoekmultiplexer in Sinatra-stijl die werkt met Go's net/http-pakket. De Pat-router heeft geen andere functionaliteiten dan routering.

Voer deze opdracht uit in uw werkmap om de Pat Router te installeren

Gaan download github.com/bmizerany/pat

De Pat-router implementeert vergelijkbare functionaliteiten als de ServeMux methode.

Hier leest u hoe u de routering van verzoeken kunt afhandelen met de pat pakket.

importeren (
"codering/json"
"github.com/bmizerany/pat"
"logboek"
"net/http"
)

funcHallo(schrijver http. ResponseWriter, verzoek *http. Verzoek) {
reactie := Info {
Bericht: "Succes",
Beschrijving: "Je hebt het eindpunt met succes bereikt",
}

fout := json. NewEncoder (schrijver). Encode (antwoord)

als fout != nul {
logboek. Fataln("fout")
}
}

funchoofd() {
router := pat. Nieuw() // routerinstantie
router. Get("/hallo", http. HandlerFunc (hallo)
http. Handvat("/", router)
fout := http. LuisterAndServe(":12345", nul)

als fout != nul {
logboek. Fatal("ListenAndServe:", fout)
}
}

De Nieuw methode retourneert een routerinstantie. U moet de handlerfunctie inpakken met de HandlerFunc methode. U kunt dan de Handvat methode om een ​​rootpad op te geven en de routerinstantie te koppelen voordat een server wordt gestart.

Een router bouwen is niet zo moeilijk

Alle routers in dit artikel implementeren functionaliteit van de net- en http-pakketten. U kunt de documentatie van de ServeMux-methode bekijken om te leren hoe u een router kunt repliceren met extra functionaliteit om aan uw behoeften te voldoen.

Frameworks zoals Gin en Fiber bevatten routeringsfunctionaliteit van het netpakket of externe pakketten die het implementeren.