آموزش ویژگی های ECMAScript 6 (جلسه 47) : آموزش Proxy API - قسمت 1

- visibility ۰ mode_comment

همونطور که اطلاع دارید در جلسه قبل مباحث مربوط به Reflect API رو به پایان رسوندیم و شما رو بصورت کامل با متدهای اون آشنا کردیم. در این جلسه میخوایم کار با Proxy API که یکی دیگر از مباحث جدید اضافه شده در ES6 می باشد بحث کنیم و شما رو بصورت کامل با اون آشنا کنیم.

مقدمه در مورد Proxy

همانند Reflect API، شئ Proxy API نیز در ES6 معرفی شده و امکانات ویژه و کاربردی رو در اختیار برنامه نویسان قرار میده که با استفاده از اون میتونن Metapogramming انجام بدهند و رفتار پیش فرض مربوط به عملگرها و متدهای مختلف رو متناسب با نیازشون تغییر بدهند.

حتما واژه پروکسی یا Proxy زیاد به گوشتون خورده است.

پروکسی همیشه بین شما و چیزی که میخواید با اون ارتباط برقرار کنید قرار میگیره و به عنوان نماینده ای از شما کارتون رو انجام میده. بزارید یک مثال مربوط به سرور پروکسی براتون بزنم تا قضیه رو بهتر متوجه بشید.

Proxy server چیزی هست که بین مرورگر (مانند Chrome و Firefox و ...) و سرور (Apache و NGINX و ...) قرار میگیره و قابلیت تغییر دادن Request و Response های انتقالی بین سرور و کاربر رو دارد.

تصویر زیر رو ببینید:

همونطور که میبینید دو کامپیوتر بنام های Alice و Bob وجود دارند و Alice به شخصه اطلاعاتی در مورد زمان فعلی ندارد. در سوی دیگر Bob اطلاعات دقیقی در مورد زمان فعلی دارد. Alice بصورت مستقیم از Bob زمان فعلی رو نمیپرسه و در عوض از Proxy میخواد که زمان فعلی رو از Bob سوال بکنه. Proxy زمان فعلی رو از Bob میپرسه و پاسخ اون رو دریافت کرده و در اختیار Alice قرار میدهد. پس همونطور که میبینید کامپیوتر Bob متوجه نمیشه که Alice داره از اون سوال میپرسه و فکر میکنه که Proxy مستقیما این کار رو انجام داده است و Bob هیچ اطلاعی در مورد Alice ندارد.

تصویر بالا یکی از دلایلی هست که از پروکسی برای جستجو مخفیانه استفاده میشه و مثلا با استفاده از اونا میتونیم به سایتهای فیلتری که وجود دارند دسترسی داشته باشیم.

پروکسی در ES6

پروکسی در ES6 نیز بین کدها و شئ مورد نظر شما قرار میگیره.

اینطور میشه گفت که پروکسی، شئ مورد نظر شما رو در برمیگیره و با اون در ارتباط هست و میتونین با استفاده از hook های مختلفی که وجود داره، رفتار شئ رو تغییر بدین و نتایج متفاوتی رو دریافت کنید. پس ما مستقیما با شئ کاری نداریم و کارهایی که میخوایم رو از پروکسی درخواست کرده و پروکسی هم در پس زمینه با شئ ارتباط برقرار میکنه و نتیجه رو در اختیار ما قرار میده.

با استفاده از این پروکسی میتونین تقریبا تمامی رفتارهای مربوط به یک شئ رو تغییر بدین. میتونین جوابهای برگشتی از شئ مورد نظرتون رو تغییر بدین و از اون برای موارد مختلفی استفاده کنید.

از پروکسی ها میتونین در اعمال زیادی استفاده کنید که چند نمونه از اونا رو قرار میدم:

  • بالا بردن امنیت اپلیکیشن
  • میتونیم بفهمیم توابع چه مدت طول میکشن که اجرا بشن و چیزهای مورد نظرمون رو Log کنیم
  • میتونین رفتار توابع و اشیاء رو تغییر بدین
  • استفاده در اعتبارسنجی ورودی و خروجی
  • و ...

مثلا فرض کنید از یک شئ یک ویژگی رو درخواست کنید که وجود ندارد. در این حالت undefined برگشت داده میشه. میتونین با استفاده از پروکسی کاری کنید که بجای برگشت دادن undefined یک متن برگشت داده بشه و به کاربر یا برنامه نویس بگه که این ویژگی وجود ندارد. مثلا با استفاده از پروکسی میتونین کاری کنید که اگر مقدار درخواستی عددی بود، کار مورد نظر انجام نشه و فقط در مواردی که رشته هست انجام بشود.

در ادامه با مثالهای مختلفی که میزنیم، شما رو بصورت کامل با پروکسی آشنا خواهیم کرد.

چند کلید واژه در مورد پروکسی وجود داره که بهتره قبل از شروع، اونا رو یاد بگیرید:

  • target : شئ اصلی که پروکسی اون رو در برمیگیره. این شئ میتونه شئ Javascript مانند کتابخانه jQuery یا یک آرایه یا یک تابع و یا حتی یک پروکسی دیگر باشد.
  • handler : یک شئ که رفتار پروکسی رو مشخص و پیاده سازی میکند
  • traps : متدهایی که در handler تعریف میشن و نقش دام رو ایفاد میکنن و زمانی که مورد نیاز باشند، اجرا میشوند

مثال مقدماتی برای پروکسی

سازنده Proxy دو ورودی رو دریافت میکنه.

ورودی اول target و ورودی دوم handler می باشد. فعلا بیخیال handler بشید و بجای اون یک شئ خالی قرار میدیم و بعدا traps ها رو درونش قرار میدیم. کد زیر رو در نظر بگیرید:

همونطور که میبینید در ابتدا یک شئ بنام ali تعریف کردیم و تعدادی ویژگی برای اون قرار دادیم. در خط 7 یک پروکسی جدید برای شئ ali تعریف کردیم و handler رو هم فعلا یک شئ خالی قرار دادیم. این پروکسی رو درون متغیر p قرار دادیم تا بتونیم به اون دسترسی داشته باشیم. زمانی که درون handler چیزی رو قرار نمیدین و یا مقدار پیش فرض رو برای متدها قرار میدین، رفتار پروکسی دقیقا معادل با رفتار شئ می باشد و هر نتیجه ای که از شئ میگرفتید، از پروکسی هم خواهید گرفت.

میبینید که در خط 9 مقدار ویژگی name در شئ و پروکسی با هم برابر می باشد.

زمانی که یک پروکسی رو برای شئ تعریف میکنید، به این معنی نیست که دیگه نمیتونین از خود شئ مستقیما استفاده کنید. شما میتونین همانند گذشته بصورت مستقیم نیز با شئ در ارتباط باشید.

میبینید که در خطوط بعدی ویژگی رو به شئ اضافه کردیم و این ویژگی متناظرا به پروکسی نیز اضافه شده است. بعد از اون ویژگی رو در پروکسی تغییر دادیم و این تغییر در شئ اصلی نیز به وجود اومده است.

در جلسات بعدی توضیحات بیشتری در مورد پروکسی در اختیارتون قرار خواهم داد.

موفق و پیروز باشید.

یا علی

comment دیدگاه کاربران
ارسال نظرات

کاربر گرامی، امکان ارسال نظر و پشتیبانی برای دوره های مجازی فقط برای دانشجویان این دوره امکان پذیر می باشد.