Let's Go › استفاده از زمینه درخواست
قبلی · فهرست · بعدی
فصل 11.

استفاده از زمینه درخواست (Using Request Context)

در این فصل، نحوه استفاده از زمینه درخواست (Request Context) را بررسی می‌کنیم. این شامل مدیریت داده‌ها (Data Management)، لغو عملیات (Operation Cancellation) و زمان‌بندی (Timing) می‌شود.

در این فصل خواهیم آموخت:

در حال حاضر منطق ما برای احراز هویت کاربر شامل بررسی این است که آیا مقدار "authenticatedUserID" در داده‌های جلسه آنها وجود دارد یا خیر، به این صورت:

func (app *application) isAuthenticated(r *http.Request) bool {
    return app.sessionManager.Exists(r.Context(), "authenticatedUserID")
}

ما می‌توانیم این بررسی را با پرس و جو از جدول users در پایگاه داده خود قوی‌تر کنیم تا مطمئن شویم که مقدار "authenticatedUserID" یک مقدار واقعی و معتبر است (یعنی ما حساب کاربر را از زمانی که آخرین بار وارد شده‌اند حذف نکرده‌ایم).

اما یک مشکل جزئی در انجام این بررسی اضافی پایگاه داده وجود دارد.

کمک‌کننده isAuthenticated() ما می‌تواند به طور بالقوه چندین بار در هر چرخه درخواست فراخوانی شود. در حال حاضر ما از آن دو بار استفاده می‌کنیم — یک بار در میان‌افزار requireAuthentication() و دوباره در کمک‌کننده newTemplateData(). بنابراین، اگر از کمک‌کننده isAuthenticated() مستقیماً به پایگاه داده پرس و جو کنیم، در هر درخواست، سفرهای رفت و برگشت تکراری به پایگاه داده خواهیم داشت. و این خیلی کارآمد نیست.

رویکرد بهتر این است که این بررسی را در برخی از میان‌افزارها انجام دهیم تا تعیین کنیم که آیا درخواست فعلی از یک کاربر احراز هویت شده است یا خیر، و سپس آن اطلاعات را به همه هندلرهای بعدی در زنجیره منتقل کنیم.

پس چگونه این کار را انجام دهیم؟ وارد زمینه درخواست شوید.

واژه‌نامه اصطلاحات فنی

اصطلاح فارسی معادل انگلیسی توضیح
زمینه درخواست Request Context محیط اجرای درخواست
مدیریت داده‌ها Data Management کنترل داده‌های درخواست
لغو عملیات Operation Cancellation توقف اجرای عملیات
زمان‌بندی Timing کنترل زمان اجرا
زمینه Context محیط اجرای برنامه
مهلت زمانی Timeout محدودیت زمان اجرا
مقدار کلید Key Value داده ذخیره شده در زمینه
انتشار سیگنال Signal Propagation ارسال سیگنال لغو
مدیریت خطا Error Handling کنترل خطاهای اجرا
همگام‌سازی Synchronization هماهنگی اجرای عملیات