/ / 4 Đi tới bộ định tuyến web cho ứng dụng web tiếp theo của bạn

4 Đi tới bộ định tuyến web cho ứng dụng web tiếp theo của bạn

Định tuyến web là một kỹ thuật gán các yêu cầu HTTP cho các hàm xử lý hoạt động trên đường dẫn URL được chỉ định. Định tuyến thường được sử dụng để xây dựng các ứng dụng một trang (SPA) và API. Trong bộ định tuyến, mã xác định chuỗi hành động đi kèm với yêu cầu của người dùng.

Thư viện tiêu chuẩn Go có hầu hết các chức năng bạn cần để xây dựng các ứng dụng web, bao gồm cả định tuyến. Bạn có thể dùng ServeMux gõ vào net / http gói để xử lý tuyến đường cơ bản. Nếu bạn cần xử lý tuyến đường phức tạp hơn, có rất nhiều gói định tuyến để bạn lựa chọn.


Bắt đầu với Định tuyến trong Go

Hệ sinh thái của Go là nơi chứa các gói định tuyến giúp loại bỏ những thứ không cần thiết và giúp việc xây dựng các ứng dụng và dịch vụ web dễ dàng hơn.

Nhiều khuôn khổ web Go triển khai một số gói định tuyến này.

Đây là một mô hình cấu trúc đơn giản cho JSON phản hồi mà bạn sẽ trả lại cho khách hàng trong hướng dẫn này.

type Info struct {
Message string `json:"message"`
Description string `json:"description"`
}

Hầu hết các bộ định tuyến Go vẫn sử dụng net / http ResponseWriterLời yêu cầu các phương thức làm tham số trong các hàm xử lý.

func hello(writer http.ResponseWriter, request *http.Request) {
}

Ngoài ra, bạn sẽ cần khởi động một máy chủ với ListenAndServe phương pháp khởi động máy chủ trong hầu hết các gói.

err := http.ListenAndServe(":8000", router)

if err != nil {
return
}

Dưới đây là một số gói định tuyến phổ biến trong hệ sinh thái Go.

1. Bộ định tuyến Gorilla Mux

Gói Gorilla Mux triển khai cả bộ định tuyến yêu cầu và bộ điều phối yêu cầu cho các yêu cầu HTTP. Nó giống như http.ServeMux nhưng với chức năng bổ sung.

Bộ định tuyến Gorilla Mux triển khai http.Handler giao diện và các phương pháp của nó tương thích với ServeMux phương pháp. Gói này cũng thực hiện nhiều lược đồ URL và bạn có thể sử dụng bộ định tuyến làm bộ định tuyến con (các tuyến lồng nhau) để xác định các tuyến tương tự.


Gói Gorilla Mux là một phần của bộ công cụ web Gorilla. Bộ công cụ bao gồm các gói liên quan đến web để giải quyết nhiều vấn đề từ việc giữ người dùng đăng nhập bằng Sessions đến lưu trữ dữ liệu bằng Cookie.

Chạy lệnh này trong phần cuối của không gian làm việc của bạn để cài đặt gói Gorilla Mux.

go get -u github.com/gorilla/mux

Đây là cách bạn có thể thiết lập LẤY yêu cầu định tuyến đến một hàm xử lý mã hóa phản hồi JSON với gói Gorilla Mux.

import (
"encoding/json"
"github.com/gorilla/mux"
"log"
"net/http"
)

func hello(writer http.ResponseWriter, request *http.Request) {
response := Info {
Message: "Success",
Description: "You've successfully written to the client",
}

err := json.NewEncoder(writer).Encode(response)

if err != nil {
log.Fatalln(err)
}
}

func main() {
router := mux.NewRouter()
router.HandleFunc("/hello", hello).Methods("GET")
err := http.ListenAndServe(":8000", router)

if err != nil {
return
}
}

Các xin chào hàm xử lý mã hóa cấu trúc thành JSON bằng cách sử dụng Mã hóa phương pháp của NewEncoder cấu trúc.

Các chính hàm gán một phiên bản bộ định tuyến Gorilla Mux mới cho bộ định tuyến Biến đổi. Sau đó nó gọi HandleFunc phương pháp ánh xạ tuyến đường đến hàm xử lý. Bạn có thể dùng Phương pháp để chỉ định một loại yêu cầu.

2. Bộ định tuyến Chi

Chi Router là một bộ định tuyến nhẹ, nhanh, có thể kết hợp để xây dựng các dịch vụ web dựa trên HTTP trong Go. Bộ định tuyến Chi tương thích với http và không có phụ thuộc bên ngoài nào cho bộ định tuyến.

Không giống như nhiều bộ định tuyến, Chi cung cấp khả năng kiểm soát ngữ cảnh với định nghĩa bài văn gói để xử lý yêu cầu kịp thời.

Cài đặt bộ định tuyến Chi vào mô-đun Go của bạn bằng lệnh này.

go get github.com/go-chi/chi

Định tuyến với bộ định tuyến Gorilla Mux và bộ định tuyến Chi rất giống nhau. Đây là cách bạn có thể thiết lập một LẤY yêu cầu mã hóa cấu trúc thành JSON như một phản hồi.

import (
"encoding/json"
"github.com/go-chi/chi/v5"
"log"
"net/http"
)

func main() {
router := chi.NewRouter()
router.Get("/hello", hello)
err := http.ListenAndServe(":8000", router)

if err != nil {
return
}
}

func hello(writer http.ResponseWriter, request *http.Request) {
response := Info {
Message: "Success",
Description: "You've successfully written to the client",
}

err := json.NewEncoder(writer).Encode(response)

if err != nil {
log.Fatalln(err)
}
}

Các xin chào hàm xử lý là hàm xử lý cho LẤY lời yêu cầu.

bên trong chính chức năng, bộ định tuyến biến là một cá thể bộ định tuyến Chi. Bạn có thể chỉ định một phương thức yêu cầu với tên phương thức; trong trường hợp này, Lấy nhận định danh hàm tuyến đường và trình xử lý làm tham số.

3. Gói HttpRouter

Gói HttpRouter là một bộ ghép kênh yêu cầu nhẹ, hiệu suất cao. Nó cung cấp nhiều chức năng hơn ServeMux thực hiện gói http.

Gói HttpRouter có dung lượng bộ nhớ nhỏ, hiệu suất cao và khả năng mở rộng tốt. Đây là một trong những bộ định tuyến lâu đời nhất và được sử dụng nhiều nhất trong hệ sinh thái cờ vây, được triển khai trong nhiều khuôn khổ cờ vây phổ biến, bao gồm cả thư viện Gin.

Chạy lệnh này trên đầu cuối của thư mục làm việc của bạn sẽ cài đặt gói HttpRouter.

go get github.com/julienschmidt/httprouter

Định tuyến với HttpRouter hơi khác so với các bộ định tuyến Chi và Gorilla Mux.

Đây là cách bạn có thể thiết lập một yêu cầu GET đơn giản với gói HttpRouter.

import (
"encoding/json"
"github.com/julienschmidt/httprouter"
"log"
"net/http"
)

func main() {
router := httprouter.New()
router.GET("/hello", hello)
err := http.ListenAndServe(":8000", router)

if err != nil {
return
}
}

func hello(writer http.ResponseWriter, request *http.Request, _ httprouter.Params) {
response := Info {
Message: "Success",
Description: "You've successfully hit the API endpoint",
}

err := json.NewEncoder(writer).Encode(response)

if err != nil {
log.Fatalln(err)
}
}

Các hàm xử lý cho gói HttpRouter phải có Params phương thức của bộ định tuyến HTTP.

Các bộ định tuyến biến là một thể hiện của HttpRouter. Bạn có thể thiết lập yêu cầu GET với LẤY phương thức nhận định tuyến và hàm xử lý.

4. Bộ định tuyến Pat

Pat là một bộ ghép kênh yêu cầu HTTP kiểu Sinatra hoạt động với gói net / http của Go. Bộ định tuyến Pat không có bất kỳ chức năng nào ngoài định tuyến.

Chạy lệnh này trong thư mục làm việc của bạn để cài đặt Bộ định tuyến Pat

go get github.com/bmizerany/pat

Bộ định tuyến Pat thực hiện các chức năng tương tự như ServeMux phương pháp.

Đây là cách bạn có thể xử lý định tuyến yêu cầu với vỗ về bưu kiện.

import (
"encoding/json"
"github.com/bmizerany/pat"
"log"
"net/http"
)

func hello(writer http.ResponseWriter, request *http.Request) {
response := Info {
Message: "Success",
Description: "You have successfully hit the endpoint",
}

err := json.NewEncoder(writer).Encode(response)

if err != nil {
log.Fatalln("err")
}
}

func main() {
router := pat.New()
router.Get("/hello", http.HandlerFunc(hello))
http.Handle("/", router)
err := http.ListenAndServe(":12345", nil)

if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}

Các Mới phương thức trả về một cá thể bộ định tuyến. Bạn sẽ phải bọc chức năng xử lý bằng HandlerFunc phương pháp. Sau đó, bạn có thể sử dụng Xử lý để chỉ định một đường dẫn gốc và gắn kết phiên bản bộ định tuyến trước khi khởi động một máy chủ.

Xây dựng một bộ định tuyến không khó lắm

Tất cả các bộ định tuyến trong bài viết này triển khai chức năng từ gói net và http. Bạn có thể xem tài liệu về phương pháp ServeMux để tìm hiểu cách sao chép bộ định tuyến có thêm chức năng phù hợp với nhu cầu của mình.

Các khung như Gin và Fiber bao gồm chức năng định tuyến từ gói mạng hoặc các gói bên ngoài thực hiện nó.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *