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

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

مقدمه ای بر بسته HTTP Go

Go یک زبان قدرتمند و انعطاف پذیر برای ساخت اپلیکیشن های تحت وب است. بسته خالص نقش اساسی در اکوسیستم Go دارد.

Go یک زبان قدرتمند و انعطاف پذیر برای ساخت اپلیکیشن های تحت وب است. بسته خالص نقش اساسی در اکوسیستم Go دارد.

مانند بسیاری از زبان های برنامه نویسی سمت سرور، Go با یک بسته HTTP برای تعامل با پروتکل HTTP عرضه می شود. بسته Go مربوطه بسته http است که یک بسته فرعی از بسته net است.

بسته net/http چیست؟

نمای کلی بسته http

بسته net/http یکی از کتابخانه های استاندارد Go است. مجموعه کاملی از توابع و انواع را برای ساخت کلاینت‌ها، سرورهای HTTP و سایر عملیات‌های مبتنی بر HTTP فراهم می‌کند. این موارد عبارتند از:

  • توابع برای ایجاد درخواست های HTTP.
  • رسیدگی به درخواست ها و پاسخ ها
  • ارائه درخواست های HTTP
  • اشیاء مرتبط مانند هدرها و کوکی ها.

بسته net/http همچنین از رمزگذاری TLS/SSL، HTTP/2 و سایر ویژگی‌های پیشرفته پشتیبانی می‌کند که این بسته را به ابزاری ضروری برای توسعه‌دهندگان Go تبدیل می‌کند.

بسیاری از کتابخانه ها و فریم ورک های محبوب Go، از کیت ابزار وب Gorilla گرفته تا چارچوب وب Echo، در بالای بسته net/http ساخته شده اند.

راه اندازی یک سرور HTTP ساده

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

در اینجا یک برنامه برای اجرای یک سرور ساده در Go آمده است:

package main

import (
    "fmt"
    "net/http"
)

// handler is a typical HTTP request-response handler in Go; details later
func handler(w http.ResponseWriter, r *http.Request) {
    // Fprintf formats the string to a writer
    fmt.Fprintf(w, "Hello, World!")
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}

تابع handler یک کنترل کننده درخواست-پاسخ معمولی برای بسته http است. این تابع رشته “Hello, World!” را می نویسد. به نویسنده پاسخ HTTP.

مطلب مرتبط:   اعتبارسنجی Go Structs با استفاده از Govalidator

هنگام اجرای کد و بازدید از http://localhost:8080/ در یک مرورگر وب، باید “Hello, World!” رشته ای که در مرورگر شما نمایش داده می شود.

نتیجه راه اندازی سرور

رسیدگی به درخواست ها و پاسخ ها

شما می توانید درخواست های دریافتی را با روش HandleFunc بسته http رسیدگی کنید. متد HandleFunc یک رشته مسیر و یک تابع handler را می گیرد.

متد http.Request نمونه ای از درخواست ورودی است و شما می توانید از روش های متعدد نمونه خود برای تعامل با درخواست های مسیر استفاده کنید.

http.HandleFunc("/users", func(w http.ResponseWriter, r *http.Request) {
    switch r.Method {
    case "GET":
        // handle GET request
    case "POST":
        // handle POST request
    default:
        http.Error(w, "Invalid request method", http.StatusMethodNotAllowed)
    }
})

کد بالا از بسته http برای تعریف یک تابع کنترل کننده HTTP برای مسیر /users استفاده می کند. تابع handler به درخواست های HTTP ورودی در مسیر گوش می دهد و آنها را بر اساس روش درخواست پردازش می کند (به عنوان مثال، GET، POST، و غیره)

تابع handler متدهای ResponseWriter و Request را به عنوان آرگومان می گیرد. ResponseWriter یک رابط است که به کنترل کننده کمک می کند تا داده ها را به عنوان پاسخ به مشتری بنویسد، و Request ساختاری است که حاوی اطلاعاتی در مورد درخواست ورودی است، مانند روش HTTP، URL، هدرها و غیره.

تابع کنترل کننده بالا از یک دستور switch برای تعیین روش درخواست و اجرای بلوک های کد مختلف بر اساس روش استفاده می کند. اگر روش GET باشد، کنترل کننده درخواست GET را رسیدگی می کند. در غیر این صورت، روش POST است. درخواست POST را رسیدگی می کند.

مطلب مرتبط:   11 تگ غیر معمول HTML برای تقویت مهارت های توسعه وب شما

اگر روش چیز دیگری باشد، یک http.Error با پیام “Invalid request method” و یک کد وضعیت StatusMethodNotAllowedHTTP برای مشتری ارسال می کند.

می توانید با استفاده از روش Write نمونه نویسنده خود که یک تکه بایت از رشته ها را می گیرد و رشته را می نویسد، رشته ها را به مشتری بازنویسی کنید.

w.Write([]byte("Hello, World!"))

می توانید از متد WriteHeader نمونه ResponseWriter خود برای نوشتن هدرها برای مشتری استفاده کنید.

w.WriteHeader(http.StatusOK)

کار با میان افزار HTTP

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

در اینجا مثالی از ثبت عملکرد کنترل کننده میان افزار در Go آورده شده است:

func loggingMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // log the request
        next.ServeHTTP(w, r)
        // log the response
    })
}

تابع loggingMiddleware یک هندلر HTTP را می گیرد و یک کنترلر HTTP جدید را برمی گرداند. کنترل کننده HTTP بازگشتی یک تابع ناشناس است که یک پاسخ نویس HTTP و یک درخواست HTTP را می گیرد. تابع درخواست را ثبت می کند و متد ServeHTTP را در کنترل کننده HTTP بعدی فراخوانی می کند و به عنوان آرگومان پاسخ نویس و درخواست را ارسال می کند.

شما می توانید توابع میان افزار را با روش Handle بسته http مدیریت کنید. روش Handle مسیر و تابع میان افزار را در بر می گیرد.

http.Handle("/", loggingMiddleware(http.HandlerFunc(handler)))

تغییر مسیر با بسته HTTP

تغییر مسیر یک عملیات محبوب برای برنامه های کاربردی وب است که کاربران را به منابع یا صفحات وب دیگر ارجاع می دهد.

مطلب مرتبط:   3 ارائه دهنده خدمات Backend-as-a-a-Service برای React Apps

می توانید با استفاده از روش Redirect بسته http به صفحه وب دیگری هدایت شوید.

http.Redirect(w, r, "http://example.com", http.StatusMovedPermanently)

روش Redirect شامل نمونه ResponseWriter و Request، URL صفحه جدید و یک کد وضعیت برای تغییر مسیر می شود.

شما می توانید API های پیچیده را در Go بسازید

بسته http یک ابزار قدرتمند و انعطاف پذیر برای ساخت API های پیچیده است. می‌توانید از کتابخانه استاندارد غنی Go و سایر بسته‌های شخص ثالث قدرتمند برای افزودن عملکرد به API‌های خود، مانند اتصال به پایگاه داده و پشتیبانی از چارچوب‌های مختلف وب، استفاده کنید.

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