Idempotence
Fiber کا idempotence مڈی ویر allows کرتا ہے کے fault-tolerant APIs کی تخلیق کی اجازت ھے، جہاں دہری ہوتی ہوئی درخواستیں (مثلا، کلائنٹ نیٹ ورک مسائل کی بنا پر) سرور پر یکساں کام کو بار بار نہیں چلتی ہیں، چونکہ یہ ایک عمومی API idempotence mechanism کو پیش کرتی ہے۔
Function Signature
func New(config ...Config) fiber.Handler
مثالی کوڈ
Fiber ویب فریم ورک کی مڈی ویر کی پیکیج لانا۔
import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/idempotency"
)
شامل تشکیل
Fiber ایپلیکیشن کو شروع کرنے کے بعد، مڈی ویر میڈیل ویر کو سیدھے طور پر حوالہ دیا جا سکتا ہے۔
app.Use(idempotency.New())
کسٹم تشکیل
app.Use(idempotency.New(idempotency.Config{
Lifetime: 42 * time.Minute,
// ...
}))
تشکیل کے اختیارات
خصوصیت | قسم | تفصیل | پہلی قیمت |
---|---|---|---|
Next | func(*fiber.Ctx) bool |
اگر یہ true واپس کرے تو mیڈی ویر کو چھوڑنا تعین کرتی ہے | safe method usage کا فنکشن |
Lifetime | time.Duration |
Lifetime کوئی بھی idempotence کی کلید کا مقامی زندگی کا عرصہ ھے۔ | 30 * time.Minute |
KeyHeader | string |
KeyHeader نام ہے header کا جو idempotence کی کلید شامل کرتا ہے۔ | "X-Idempotency-Key" |
KeyHeaderValidate | func(string) error |
KeyHeaderValidate فنکشن ایک فنکشن کا تعین ہوتا ھے جو idempotence header کے syntax کی تصدیق کے لئے ہے۔ | UUID validation کے لئے فنکشن |
KeepResponseHeaders | []string |
KeepResponseHeaders وہ ہیڈرز کی فہرست ھے جو اصل جواب سے محفوظ کی جائیں گی۔ | nil (preserves all headers) |
Lock | Locker |
Lock idempotence کو کنجی بناتا ہے۔ | A lock in memory |
Storage | fiber.Storage |
Storage idempotence کی کلید کے مطابقت سے ریسپانس ڈیٹا سٹور کرتا ہے۔ | Storage in memory |
پہلے تشکیل
var ConfigDefault = Config{
Next: func(c *fiber.Ctx) bool {
// آگر request safe HTTP methods کا استعمال کرکے کی جا رہی ہے تو مڈی ویر کو چھوڑینا
return fiber.IsMethodSafe(c.Method())
},
Lifetime: 30 * time.Minute,
KeyHeader: "X-Idempotency-Key",
KeyHeaderValidate: func(k string) error {
if l, wl := len(k), 36; l != wl { // UUID length is 36 characters
return fmt.Errorf("%w: invalid length: %d != %d", ErrInvalidIdempotencyKey, l, wl)
}
return nil
},
KeepResponseHeaders: nil,
Lock: nil, // Set in configDefault to avoid data allocation here
Storage: nil, // Set in configDefault to avoid data allocation here
}