برنامه نویسی

ایجاد درخواست های HTTP مانند Pro in Go: استفاده از Go -Resty با Goframe 🚀 – Community Dev

سلام آنجا ، همکار Gophers! 👋

تا به حال خود را با درخواست HTTP در GO کشتی پیدا کرده اید؟ شاید شما در حال ساختن خدمتی باشید که باید با چندین API صحبت کند ، یا فقط از نوشتن کد مشتری HTTP BoilerPlate خسته شده اید. خوب ، من چیزی دارم که ممکن است زندگی شما را آسانتر کند!

در این راهنما ، من به شما نشان می دهم که چگونه از آن استفاده کنید go-resty – یک کتابخانه مشتری HTTP غنی از ویژگی – در چارچوب Goframe برای صاف کردن و حفظ ادغام API شما. به من اعتماد کن ، خود آینده شما از شما متشکرم!

چرا استراحت؟ 🤔

قبل از شیرجه رفتن ، ممکن است تعجب کنید: “چرا فقط از استاندارد استفاده نکنید net/http بسته؟ “سوال خوب! در حالی که مشتری استاندارد HTTP GO قدرتمند است ، go-resty لایه ای از راحتی را با:

  • روشهای زنجیره ای (کد Verbose Bye-bye!)
  • مکانیسم های آزمایشگاهی داخلی
  • پاسخ خودکار غیرقانونی
  • درخواست/پاسخ پشتیبانی میان افزار
  • و خیلی بیشتر!

شروع کار

اولین چیزها ابتدا ، بیایید ابزارهای خود را آماده کنیم. شما نیاز به نصب دارید (فرض می کنم شما آن را پوشانده اید!) ، سپس اجرا کنید:

go install github.com/gogf/gf/v2/cmd/gf@latest
go get github.com/go-resty/resty/v2
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اولین درخواست شما

بیایید با چیزی ساده شروع کنیم. در اینجا نحوه درخواست دریافت دریافت می کنید:

import (
    "github.com/go-resty/resty/v2"
    "github.com/gogf/gf/v2/frame/g"
)

func main() {
    // Create a client (tip: reuse this client!)
    client := resty.New()

    // Make a request
    resp, err := client.R().
        SetQueryParams(map[string]string{
            "page": "1",
            "limit": "10",
        }).
        Get("https://api.example.com/users")

    if err != nil {
        g.Log().Errorf(ctx, "Oops! Something went wrong: %v", err)
        return
    }

    // Use the response
    fmt.Printf("Status: %v\n", resp.Status())
    fmt.Printf("Body: %v\n", resp.String())
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

بسیار تمیز ، درست است؟ 😎

ارسال داده ها آسان ساخته شده است

آیا نیاز به ارسال برخی از داده ها دارید؟ در اینجا نحوه درخواست پست ارائه شده است:

resp, err := client.R().
    SetHeader("Content-Type", "application/json").
    SetBody(map[string]interface{}{
        "username": "gopher",
        "email": "gopher@go.dev",
    }).
    Post("https://api.example.com/users")
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اشکال زدایی مانند یک حرفه ای

در حین توسعه ، می خواهید با درخواست های شما چه اتفاقی می افتد. فقط اضافه کنید:

client.SetDebug(true)
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

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

دست زدن به زمان مانند رئیس

در دنیای واقعی ، همه چیز اشتباه می شود. در اینجا نحوه رسیدگی به زمان های با لطف آورده شده است:

// Global timeout for all requests
client := resty.New().
    SetTimeout(5 * time.Second)

// Or for a specific request
resp, err := client.R().
    SetTimeout(3 * time.Second).
    Get("https://api.example.com/users")

// Check for timeout errors
if err != nil {
    if errors.Is(err, context.DeadlineExceeded) {
        fmt.Println("Request timed out! 😱")
        return
    }
    fmt.Printf("Other error: %v\n", err)
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

مکانیسم آزمایش مجدد: زیرا گاهی اوقات اوضاع شکست می خورد

در اینجا یک نمونه در دنیای واقعی تنظیم احیای API های پوسته پوسته وجود دارد:

client.
    SetRetryCount(3).
    SetRetryWaitTime(5 * time.Second).
    SetRetryMaxWaitTime(20 * time.Second).
    AddRetryCondition(
        func(r *resty.Response, err error) bool {
            return r.StatusCode() >= 500 // Retry on server errors
        },
    )
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

احراز هویت ساده ساخته شده است

آیا نیاز به اضافه کردن هدرهای AUTH به هر درخواست دارید؟ از میان افزار استفاده کنید:

client.OnBeforeRequest(func(c *resty.Client, req *resty.Request) error {
    req.SetHeader("Authorization", "Bearer " + getToken())
    return nil
})
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

نکات حرفه ای

  1. استفاده مجدد از مشتریان: یک مشتری ایجاد کنید و از آن استفاده مجدد کنید. برای هر درخواست مشتری جدیدی ایجاد نکنید!
  2. متن دوست شماست: از زمینه برای کنترل بهتر بر روی چرخه های عمر درخواست استفاده کنید:
   ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
   defer cancel()

   resp, err := client.R().
       SetContext(ctx).
       Get("https://api.example.com/users")
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  1. پاسخ ها را به درستی انجام دهید: همیشه خطا و کد وضعیت را بررسی کنید:
   if err != nil {
       return fmt.Errorf("request failed: %w", err)
   }
   if resp.StatusCode() >= 400 {
       return fmt.Errorf("bad status: %s", resp.Status())
   }
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

مثال در دنیای واقعی: ایجاد یک سرویس هواشناسی 🌤

بیایید همه اینها را با یک مثال عملی کنار هم قرار دهیم – یک سرویس هواشناسی که دارای تدابیر ، زمان بندی و موارد خطا است:

func NewWeatherService() *WeatherService {
    client := resty.New().
        SetTimeout(10 * time.Second).
        SetRetryCount(3).
        SetRetryWaitTime(1 * time.Second).
        SetHostURL("https://api.weatherapi.com/v1")

    return &WeatherService{client: client}
}

func (s *WeatherService) GetCurrentWeather(ctx context.Context, city string) (*WeatherData, error) {
    var result WeatherData

    resp, err := s.client.R().
        SetQueryParam("q", city).
        SetQueryParam("key", os.Getenv("WEATHER_API_KEY")).
        SetResult(&result).
        SetContext(ctx).
        Get("/current.json")

    if err != nil {
        return nil, fmt.Errorf("weather request failed: %w", err)
    }

    if resp.IsError() {
        return nil, fmt.Errorf("weather API error: %s", resp.String())
    }

    return &result, nil
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

بسته بندی

Go Bret با Goframe ترکیبی قدرتمند برای رسیدگی به درخواست های HTTP در GO است. این یک API تمیز را فراهم می کند در حالی که تمام ابزارهای مورد نیاز برای کد آماده تولید را به شما می دهد.

به یاد داشته باشید:

  • مشتریان خود را قابل استفاده مجدد نگه دارید
  • زمان های مناسب را تنظیم کنید
  • برای مقاومت در برابر احیا استفاده کنید
  • خطاها را با لطف انجام دهید

حالا بروید و چیزهای عالی بسازید! 🚀

بیشتر می خواهید؟ 📚

  • برای ویژگی های بیشتر اسناد Go Breaty را بررسی کنید
  • برای توسعه کامل پشته Goframe را کاوش کنید
  • برای بیشتر نکات و ترفندها مرا دنبال کنید!

آیا این به شما کمک کرده است؟ سوالات دارید؟ نظر زیر را رها کنید! 👇


نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا