خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

4 برای برنامه وب بعدی خود به روترهای وب بروید

URL ها رابط عمومی برنامه شما هستند، بنابراین مطمئن شوید که با این بسته های مسیریابی قدرتمند از آنها به طور موثر استفاده می کنید.

مسیریابی وب تکنیکی است برای تخصیص درخواست های HTTP به توابع کنترل کننده که در مسیر URL مشخص شده عمل می کنند. مسیریابی اغلب برای ساخت برنامه های تک صفحه ای (SPA) و API استفاده می شود. در روتر، کد دنباله ای از اقدامات همراه با درخواست کاربر را مشخص می کند.

کتابخانه استاندارد Go اکثر قابلیت‌هایی را که برای ساخت برنامه‌های وب نیاز دارید، از جمله مسیریابی، دارد. می توانید از نوع ServeMux در بسته net/http برای مدیریت مسیر اصلی استفاده کنید. اگر به مدیریت مسیر پیچیده تری نیاز دارید، بسته های مسیریابی زیادی برای انتخاب وجود دارد.

شروع به کار با مسیریابی در Go

اکوسیستم Go میزبان بسته‌های مسیریابی است که موارد غیرضروری را انتزاعی می‌کند و ساخت برنامه‌ها و سرویس‌های وب را آسان‌تر می‌کند.

بسیاری از چارچوب های وب Go برخی از این بسته های مسیریابی را پیاده سازی می کنند.

در اینجا یک مدل ساختار ساده برای پاسخ JSON وجود دارد که در این آموزش به مشتری باز می‌گردانید.

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

اکثر روترهای Go هنوز از متدهای net/http ResponseWriter و Request به عنوان پارامتر در توابع کنترلر استفاده می کنند.

func hello(writer http.ResponseWriter, request *http.Request) {
// handler function business logic here
}

همچنین، برای راه‌اندازی سرور در اکثر بسته‌ها، باید سروری را با روش ListenAndServe راه‌اندازی کنید.

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

if err != nil {
return
}

در اینجا برخی از بسته های مسیریابی محبوب در اکوسیستم Go آورده شده است.

1. روتر Gorilla Mux

صفحه اصلی گوریل موکس

بسته Gorilla Mux هم یک روتر درخواست و هم یک توزیع کننده درخواست برای درخواست های HTTP پیاده سازی می کند. این مانند روش http.ServeMux است اما با قابلیت های اضافه شده.

روتر Gorilla Mux رابط http.Handler را پیاده سازی می کند و روش های آن با متد ServeMux سازگار است. این بسته همچنین طرح های URL متعددی را پیاده سازی می کند و می توانید از روترها به عنوان روترهای فرعی (مسیرهای تودرتو) برای تعریف مسیرهای مشابه استفاده کنید.

بسته Gorilla Mux بخشی از ابزار وب گوریلا است. این جعبه ابزار شامل بسته های مرتبط با وب برای حل بسیاری از مشکلات از ورود کاربران با Sessions تا ذخیره سازی داده ها با استفاده از کوکی ها است.

این دستور را در ترمینال فضای کاری خود اجرا کنید تا بسته Gorilla Mux نصب شود.

go get -u github.com/gorilla/mux

در اینجا نحوه تنظیم یک مسیر درخواست GET به یک تابع handler است که به یک پاسخ JSON با بسته 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&aposve 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
}
}

تابع hello handler با استفاده از روش Encode ساختار NewEncoder، ساختار را به JSON کد می کند.

تابع اصلی یک نمونه روتر جدید Gorilla Mux را به متغیر روتر اختصاص می دهد. سپس متد HandleFunc را فراخوانی می کند تا مسیر را به تابع handler ترسیم کند. می توانید از روش Methods برای تعیین نوع درخواست استفاده کنید.

2. روتر چی

صفحه اصلی روتر چی

Chi Router یک روتر سبک وزن، سریع و قابل ترکیب برای ساخت سرویس های وب مبتنی بر HTTP در Go است. روتر Chi با بسته http سازگار است و هیچ وابستگی خارجی برای روتر وجود ندارد.

برخلاف بسیاری از روترها، Chi کنترل زمینه را با بسته زمینه برای رسیدگی به موقع درخواست ها فراهم می کند.

با این دستور روتر Chi را روی ماژول های Go خود نصب کنید.

go get github.com/go-chi/chi

مسیریابی با روتر Gorilla Mux و روتر Chi بسیار شبیه است. در اینجا نحوه تنظیم یک درخواست GET مشابه است که ساختار را به عنوان پاسخ به JSON کد می کند.

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&aposve successfully written to the client",
}

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

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

تابع hello handler تابع handler برای درخواست GET است.

در تابع اصلی، متغیر روتر یک نمونه روتر Chi است. شما می توانید یک روش درخواست را با نام روش مشخص کنید. در این حالت Get مسیر و شناسه تابع handler را به عنوان پارامتر می گیرد.

3. بسته HttpRouter

بسته HttpRouter یک مالتی پلکسر درخواستی بسیار کارآمد و سبک است. عملکرد بیشتری نسبت به اجرای ServeMux بسته http ارائه می دهد.

بسته HttpRouter دارای حافظه کوچک، کارایی بالا و مقیاس پذیری خوب است. این یکی از قدیمی ترین و پرکاربردترین روترها در اکوسیستم Go است که در بسیاری از فریم ورک های محبوب Go از جمله کتابخانه Gin پیاده سازی شده است.

اجرای این دستور در ترمینال دایرکتوری کاری شما، بسته HttpRouter را نصب می کند.

go get github.com/julienschmidt/httprouter

مسیریابی با HttpRouter کمی با روترهای Chi و Gorilla Mux متفاوت است.

در اینجا نحوه تنظیم یک درخواست ساده GET با بسته 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&aposve successfully hit the API endpoint",
}

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

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

توابع Handler برای بسته HttpRouter باید متد Params روتر HTTP را داشته باشند.

متغیر روتر نمونه ای از HttpRouter است. می‌توانید یک درخواست GET را با روش GET که مسیر را می‌گیرد و شناسه تابع handler تنظیم کنید.

4. مسیریاب پت

Pat یک مالتی پلکسر درخواست HTTP به سبک سیناترا است که با بسته net/http Go کار می کند. روتر Pat هیچ عملکرد دیگری به جز مسیریابی ندارد.

این دستور را در پوشه کاری خود اجرا کنید تا Pat Router نصب شود

go get github.com/bmizerany/pat

روتر Pat عملکردهای مشابه روش ServeMux را پیاده سازی می کند.

در اینجا نحوه مدیریت درخواست مسیریابی با بسته pat آمده است.

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 instance
router.Get("/hello", http.HandlerFunc(hello))
http.Handle("/", router)
err := http.ListenAndServe(":12345", nil)

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

روش New یک نمونه روتر را برمی گرداند. باید تابع هندلر را با روش HandlerFunc بپیچید. سپس می توانید از روش Handle برای تعیین یک مسیر ریشه و مونت نمونه روتر قبل از راه اندازی سرور استفاده کنید.

ساخت یک روتر آنقدرها هم سخت نیست

همه روترهای موجود در این مقاله عملکردی را از بسته های net و http پیاده سازی می کنند. می‌توانید مستندات روش ServeMux را بررسی کنید تا یاد بگیرید که چگونه یک روتر را با عملکرد اضافی مطابق با نیازهای خود تکرار کنید.

فریم‌ورک‌هایی مانند Gin و Fiber شامل قابلیت مسیریابی از بسته نت یا بسته‌های خارجی هستند که آن را پیاده‌سازی می‌کنند.

مطلب مرتبط:   چگونه یک React Hook سفارشی برای تماس های API بسازیم