Η δρομολόγηση Ιστού είναι μια τεχνική εκχώρησης αιτημάτων HTTP σε λειτουργίες χειριστή που λειτουργούν στην καθορισμένη διαδρομή URL. Η δρομολόγηση χρησιμοποιείται συχνά για τη δημιουργία εφαρμογών μιας σελίδας (SPA) και API. Στο δρομολογητή, ο κώδικας ορίζει την ακολουθία ενεργειών που συνοδεύουν το αίτημα ενός χρήστη.
Η τυπική βιβλιοθήκη Go έχει τις περισσότερες από τις λειτουργίες που θα χρειαστείτε για τη δημιουργία εφαρμογών ιστού, συμπεριλαμβανομένης της δρομολόγησης. Μπορείτε να χρησιμοποιήσετε το ServeMux πληκτρολογήστε το net/http πακέτο για βασικό χειρισμό διαδρομής. Εάν χρειάζεστε πιο σύνθετο χειρισμό διαδρομής, υπάρχουν πολλά πακέτα δρομολόγησης για να διαλέξετε.
Ξεκινώντας με το Routing in Go
Το οικοσύστημα της Go φιλοξενεί πακέτα δρομολόγησης που αφαιρούν τα περιττά και διευκολύνουν τη δημιουργία εφαρμογών και υπηρεσιών Ιστού.
Πολλά πλαίσια ιστού Go υλοποιούν ορισμένα από αυτά τα πακέτα δρομολόγησης.
Εδώ είναι ένα απλό μοντέλο κατασκευής για το JSON απάντηση θα επιστρέψετε στον πελάτη σε αυτό το σεμινάριο.
τύπος Πληροφορίες struct {
Μήνυμα σειρά`json:"μήνυμα"`
Περιγραφή σειρά`json:"περιγραφή"`
}
Οι περισσότεροι δρομολογητές Go εξακολουθούν να χρησιμοποιούν το net/http ResponseWriter και Αίτηση μεθόδους ως παράμετροι στις συναρτήσεις χειριστή.
funcΧαίρετε(συγγραφέας http. ResponseWriter, αίτημα *http. Αίτηση) {
// επιχειρησιακή λογική συνάρτησης χειριστή εδώ
}
Επίσης, θα χρειαστεί να ξεκινήσετε έναν διακομιστή με το ListenAndServe μέθοδος για την εκκίνηση του διακομιστή στα περισσότερα πακέτα.
λάθος := http. ListenAndServe(":8000", δρομολογητής)
αν λάθος!= μηδέν {
ΕΠΙΣΤΡΟΦΗ
}
Εδώ είναι μερικά από τα δημοφιλή πακέτα δρομολόγησης στο οικοσύστημα Go.
1. Ο δρομολογητής Gorilla Mux
Το πακέτο Gorilla Mux υλοποιεί τόσο έναν δρομολογητή αιτημάτων όσο και έναν αποστολέα αιτημάτων για αιτήματα HTTP. Είναι σαν το http. ServeMux μέθοδο αλλά με πρόσθετη λειτουργικότητα.
Ο δρομολογητής Gorilla Mux υλοποιεί το http. Χειριστής η διεπαφή και οι μέθοδοί της είναι συμβατές με το ServeMux μέθοδος. Το πακέτο υλοποιεί επίσης πολλαπλά σχήματα URL και μπορείτε να χρησιμοποιήσετε δρομολογητές ως δευτερεύοντες δρομολογητές (ένθετες διαδρομές) για να ορίσετε παρόμοιες διαδρομές.
ο Gorilla Mux Το πακέτο είναι μέρος της εργαλειοθήκης Gorilla web. Η εργαλειοθήκη περιλαμβάνει πακέτα που σχετίζονται με τον ιστό για την επίλυση πολλών προβλημάτων διατήρηση των χρηστών συνδεδεμένων με το Sessions στην αποθήκευση δεδομένων με χρήση cookies.
Εκτελέστε αυτήν την εντολή στο τερματικό του χώρου εργασίας σας για να εγκαταστήσετε το πακέτο Gorilla Mux.
πηγαίνω πάρτε -u github.com/gorilla/mux
Δείτε πώς μπορείτε να ρυθμίσετε ένα ΠΑΙΡΝΩ αίτηση διαδρομής σε μια συνάρτηση χειριστή που κωδικοποιεί μια απάντηση JSON με το πακέτο Gorilla Mux.
εισαγωγή (
"encoding/json"
"github.com/gorilla/mux"
"κούτσουρο"
"net/http"
)funcΧαίρετε(συγγραφέας http. ResponseWriter, αίτημα *http. Αίτηση) {
απάντηση := Πληροφορίες {
Μήνυμα: "Επιτυχία",
Περιγραφή: "Έχετε γράψει με επιτυχία στον πελάτη",
}err := json. NewEncoder (συγγραφέας). Encode (απόκριση)
αν λάθος!= μηδέν {
κούτσουρο. Fatalln (λάθος)
}
}funcκύριος() {
router := mux. NewRouter()
δρομολογητή. HandleFunc("/hello", hello).Μέθοδοι("GET")
λάθος := http. ListenAndServe(":8000", δρομολογητής)
αν λάθος!= μηδέν {
ΕΠΙΣΤΡΟΦΗ
}
}
ο Χαίρετε Η συνάρτηση χειριστή κωδικοποιεί τη δομή σε JSON χρησιμοποιώντας το Κωδικοποίηση μέθοδος του NewEncoder struct.
ο κύριος η λειτουργία εκχωρεί μια νέα παρουσία δρομολογητή Gorilla Mux στο δρομολογητή μεταβλητός. Στη συνέχεια καλεί το HandleFunc μέθοδο αντιστοίχισης της διαδρομής στη συνάρτηση χειριστή. Μπορείτε να χρησιμοποιήσετε το Μέθοδοι μέθοδος για τον καθορισμό ενός τύπου αιτήματος.
2. Το Chi Router
ο Chi Router είναι ένας ελαφρύς, γρήγορος, συνθέσιμος δρομολογητής για τη δημιουργία υπηρεσιών web που βασίζονται σε HTTP στο Go. Ο δρομολογητής Chi είναι συμβατός με το http πακέτο και δεν υπάρχουν εξωτερικές εξαρτήσεις για το δρομολογητή.
Σε αντίθεση με πολλούς δρομολογητές, το Chi παρέχει έλεγχο περιβάλλοντος με το συμφραζόμενα πακέτο για έγκαιρη διεκπεραίωση αιτημάτων.
Εγκαταστήστε το δρομολογητή Chi στις μονάδες Go με αυτήν την εντολή.
πηγαίνω λάβετε github.com/πηγαίνω-τσι/τσι
Η δρομολόγηση με τον δρομολογητή Gorilla Mux και τον δρομολογητή Chi είναι πολύ παρόμοια. Δείτε πώς μπορείτε να ρυθμίσετε ένα παρόμοιο ΠΑΙΡΝΩ αίτημα που κωδικοποιεί τη δομή σε JSON ως απάντηση.
εισαγωγή (
"encoding/json"
"github.com/πηγαίνω-chi/chi/v5"
"κούτσουρο"
"net/http"
)funcκύριος() {
router := chi. NewRouter()
δρομολογητή. Λήψη ("/hello", γεια)
λάθος := http. ListenAndServe(":8000", δρομολογητής)αν λάθος!= μηδέν {
ΕΠΙΣΤΡΟΦΗ
}
}funcΧαίρετε(συγγραφέας http. ResponseWriter, αίτημα *http. Αίτηση) {
απάντηση := Πληροφορίες {
Μήνυμα: "Επιτυχία",
Περιγραφή: "Έχετε γράψει με επιτυχία στον πελάτη",
}err := json. NewEncoder (συγγραφέας). Encode (απόκριση)
αν λάθος!= μηδέν {
κούτσουρο. Fatalln (λάθος)
}
}
ο Χαίρετε Η λειτουργία χειριστή είναι η συνάρτηση χειριστή για το ΠΑΙΡΝΩ αίτηση.
Στο κύριος λειτουργία, η δρομολογητή η μεταβλητή είναι μια παρουσία δρομολογητή Chi. Μπορείτε να καθορίσετε μια μέθοδο αίτησης με το όνομα της μεθόδου. σε αυτήν την περίπτωση, Παίρνω λαμβάνει ως παραμέτρους το αναγνωριστικό συνάρτησης διαδρομής και χειριστή.
3. Το πακέτο HttpRouter
ο HttpRouter Το πακέτο είναι ένας πολύ αποδοτικός, ελαφρύς πολυπλέκτης αιτημάτων. Παρέχει περισσότερη λειτουργικότητα από το ServeMux υλοποίηση του πακέτου http.
Το πακέτο HttpRouter έχει μικρό αποτύπωμα μνήμης, υψηλή απόδοση και καλή επεκτασιμότητα. Είναι ένας από τους παλαιότερους και πιο χρησιμοποιούμενους δρομολογητές στο οικοσύστημα Go, που έχει εφαρμοστεί σε πολλούς δημοφιλή πλαίσια Go, συμπεριλαμβανομένου τη βιβλιοθήκη Gin.
Η εκτέλεση αυτής της εντολής στο τερματικό του καταλόγου εργασίας σας θα εγκαταστήσει το πακέτο HttpRouter.
πηγαίνω λάβετε το github.com/julienschmidt/httprouter
Η δρομολόγηση με το HttpRouter διαφέρει ελαφρώς από τους δρομολογητές Chi και Gorilla Mux.
Δείτε πώς μπορείτε να ρυθμίσετε ένα απλό αίτημα GET με το πακέτο HttpRouter.
εισαγωγή (
"encoding/json"
"github.com/julienschmidt/httprouter"
"κούτσουρο"
"net/http"
)funcκύριος() {
δρομολογητής := httprouter. Νέος()
δρομολογητή. GET("/hello", γεια)
λάθος := http. ListenAndServe(":8000", δρομολογητής)αν λάθος!= μηδέν {
ΕΠΙΣΤΡΟΦΗ
}
}funcΧαίρετε(συγγραφέας http. ResponseWriter, αίτημα *http. Αίτημα, _ httprouter. Παράμετροι) {
απάντηση := Πληροφορίες {
Μήνυμα: "Επιτυχία",
Περιγραφή: "Έχετε φτάσει με επιτυχία το τελικό σημείο API",
}err := json. NewEncoder (συγγραφέας). Encode (απόκριση)
αν λάθος!= μηδέν {
κούτσουρο. Fatalln (λάθος)
}
}
Οι συναρτήσεις χειριστή για το πακέτο HttpRouter πρέπει να έχουν το Params μέθοδο του δρομολογητή HTTP.
ο δρομολογητή Η μεταβλητή είναι μια παρουσία του HttpRouter. Μπορείτε να ρυθμίσετε ένα αίτημα GET με το ΠΑΙΡΝΩ μέθοδος που λαμβάνει τη διαδρομή και το αναγνωριστικό συνάρτησης χειριστή.
4. Το Pat Router
Ελαφρό κτύπημα είναι ένας πολυπλέκτης αιτημάτων HTTP τύπου Sinatra που λειτουργεί με το πακέτο net/http της Go. Ο δρομολογητής Pat δεν έχει άλλες λειτουργίες εκτός από τη δρομολόγηση.
Εκτελέστε αυτήν την εντολή στον κατάλογο εργασίας σας για να εγκαταστήσετε το Pat Router
πηγαίνω λάβετε το github.com/bmizerany/pat
Ο δρομολογητής Pat υλοποιεί παρόμοιες λειτουργίες με το ServeMux μέθοδος.
Δείτε πώς μπορείτε να χειριστείτε τη δρομολόγηση αιτημάτων με το ελαφρό κτύπημα πακέτο.
εισαγωγή (
"encoding/json"
"github.com/bmizerany/pat"
"κούτσουρο"
"net/http"
)funcΧαίρετε(συγγραφέας http. ResponseWriter, αίτημα *http. Αίτηση) {
απάντηση := Πληροφορίες {
Μήνυμα: "Επιτυχία",
Περιγραφή: "Έχετε φτάσει με επιτυχία στο τελικό σημείο",
}err := json. NewEncoder (συγγραφέας). Encode (απόκριση)
αν λάθος!= μηδέν {
κούτσουρο. Fatalln ("λάθος")
}
}funcκύριος() {
router := pat. Νέος() // παράδειγμα δρομολογητή
δρομολογητή. Get("/hello", http. HandlerFunc (γεια)
http. Χειρολαβή ("/", δρομολογητής)
λάθος := http. ListenAndServe(":12345", μηδέν)
αν λάθος!= μηδέν {
κούτσουρο. Fatal ("ListenAndServe: ", err)
}
}
ο Νέος μέθοδος επιστρέφει μια παρουσία δρομολογητή. Θα πρέπει να τυλίξετε τη λειτουργία χειριστή με το HandlerFunc μέθοδος. Στη συνέχεια, μπορείτε να χρησιμοποιήσετε το Λαβή μέθοδος για τον καθορισμό μιας διαδρομής ρίζας και την προσάρτηση της παρουσίας του δρομολογητή πριν από την εκκίνηση ενός διακομιστή.
Η κατασκευή ενός δρομολογητή δεν είναι τόσο δύσκολη
Όλοι οι δρομολογητές σε αυτό το άρθρο υλοποιούν λειτουργικότητα από τα πακέτα net και http. Μπορείτε να δείτε την τεκμηρίωση της μεθόδου ServeMux για να μάθετε πώς να αναπαράγετε έναν δρομολογητή με πρόσθετη λειτουργικότητα που ταιριάζει στις ανάγκες σας.
Τα πλαίσια όπως το Gin και το Fiber περιλαμβάνουν λειτουργικότητα δρομολόγησης από το πακέτο δικτύου ή εξωτερικά πακέτα που το υλοποιούν.