Watch-IP

استخدام Watch-IP مع Go

تُغلِّف github.com/Digitload/watch-ip-sdk-go (الإصدار v0.1.1) استدعاء GET /v1/geo بطلبات مدركة للسياق (context)، دون أي تبعيات خارج المكتبة القياسية.

التثبيت

يتطلب Go 1.21 أو أحدث. هذه الوحدة (module) مرآة للقراءة فقط من مستودع Watch-IP الرئيسي إلى مستودع عام حتى يتمكن go get من جلبها.

go get

go get github.com/Digitload/watch-ip-sdk-go

البدء السريع

تأخذ GetGeo معامل context.Context كأول وسيط لها — وهو مكافئ Go لـ AbortSignal في حزمة JavaScript. وكما هو الحال مع حزم SDK الأخرى الخاصة بجانب الخادم، اضبط WithOrigin لتلبية فحص النطاقات المسموح بها للمفتاح عند الاستدعاء من خادم بدلًا من متصفح. كل حقل موقع هو مؤشر (pointer)، لأن حقول Watch-IP قابلة لأن تكون فارغة (null) بشكل مستقل — تحقق من nil قبل الوصول إلى القيمة (dereferencing).

Go

client, err := watchip.New("wip_pub_xxxxxxxx", watchip.WithOrigin("https://example.com"))
if err != nil {
    log.Fatal(err)
}

geo, err := client.GetGeo(context.Background())
if err != nil {
    log.Fatal(err)
}

if geo.Country != nil && geo.City != nil {
    fmt.Println(*geo.Country, *geo.City)
} else {
    fmt.Println("الموقع غير متاح لهذا الاتصال")
}

معالجة الأخطاء والمُهل الزمنية

كل فشل يُعيد *WatchIPError يحمل حقلي Status وCode. قيِّد زمن الطلب باستخدام context.WithTimeout بدلًا من خيار مهلة زمنية على مستوى العميل.

Go

ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()

geo, err := client.GetGeo(ctx)
var wipErr *watchip.WatchIPError
if errors.As(err, &wipErr) {
    fmt.Println(wipErr.Code, wipErr.Status, wipErr.Message)
}

ما لا تُغطيه هذه الحزمة (SDK)

لا تستدعي هذه الوحدة سوى GET /v1/geo. أما البحث عن عنوان IP، والتحقق من البريد الإلكتروني، وفحوصات المخاطر فهي نقاط نهاية منفصلة من خادم إلى خادم لا يوجد لها عميل Go بعد — استدعِها مباشرة باستخدام net/http، مع التوثيق بالطريقة نفسها الموضَّحة في دليل المصادقة.

صفحات ذات صلة