سلام؛
راجع به پاسخ سوال اولتون باید عرض کنم که مشخصاً باید با یک سرور ارتباط برقرار کنین که خُب اینکار میتونه توسط شیء اِیجَکس (AJAX) کانستراکت انجام بشه.
شما یا یک سرور (هاست) دارین و همچنین بلد هستین با یک تکنولوژی یا زبان سمت سرور کار کنین یـا هم اینکه به یک زبان یا تکنولوژی سمت سرور تسلط ندارین.
توی حالت دوم چاره ای جز استفاده از یک API (وب سرویس) ندارین. من بهتون پیشنهاد میکنم از وب سرویس
JSON Blob استفاده کنین. جزئیات کامل استفاده از وب سرویس رو میتونین از
این داکیومنت مطالعه کنین ولی من سعی میکنم کلیت نحوه استفاده از این وب سرویس در کانستراکت رو براتون شرح بدم.
پیش نیازها:
قبل از هر چیز شما باید با قالب اطلاعاتی
جیسون (JSON) آشنا باشین که اگر نیستین میتونین با یک سرچ کوچیک توی اینترنت و انجمن در موردش اطلاعات کسب کنین. همینطور باید پلاگین JSON رو برای کانستراکت نصب داشته باشین.
طبیعیه که باید شیء (پلاگین) اِی جَکس رو هم به پروژه اضافه کنین. اما پلاگین AJAX کانستراکت متأسفانه هدرهای پاسخ HTTP رو برگشت نمیده که خُب این میتونه برای ما مسئله ساز باشه! برای همین لازمه یه تغییرات کوچیکی توی پلاگین اعمال کنیم. پس لطف کنین از
این لینک پلاگین AJAX ویرایش شده رو دانلود کنین و جایگزین پلاگین AJAX پیشفرض کانستراکت بکنین.
اما تغییری که توی پلاگین اِی جَکس اعمال شده چیه؟ ما یک اکسپرشن به نام
AJAX.responseh اضافه کردیم که هدرهای پاسخ HTTP هر درخواست (ریکوئست) رو به ما بر میگردونه.
نکته مهم درباره سـاخـتار رشته JSON :
دقت کنین که رشته جیسون شما باید متشکل از شناسه توکن جایزه و توضیحات مربوطه باشه. به طوری که هر شناسه یک Node از رشته جیسون رو تشکیل میده. لازم به ذکره که به هیچ وجه اجباری نیست که شما از این پترن (الگو) تبعیت کنین. ایونت هایی که من در ادامه نوشتم بر مبنای این الگو هستن بنابراین اگر میخواین دقیقاً از همون ها الهام بگیرین لازمه که از پترن (الگو) زیر تبعیت کنین و اگر هم میخواین که پترن (الگو) منحصر به خودتون رو داشته باشین باید در همه ایونت ها به جز ایونت های مربوط به فرآیند های مدیریتی تجدید نظر کنین.
کد:
{"Token1":"توضیحات","Token2" : "توضیحات", ...}
این توضیحات میتونن هر چیزی باشن. مثلاً مقدار امتیازی که قراره بعد از وارد کردن شناسه توکن به کاربر اضافه بشه و یا هر چیز دیگه ای!
میتونین برای زمان دار کردن توکن ها تایم استمپ لحظه ایجاد هر توکن رو به عنوان توضیحاتش درج کنین و بعد با لحظه تایم استمپ ورود توکن توسط کاربر مقایسه اش کنین تا بتونین ملاحظات زمانی رو برای توکن های جایزه در نظر بگیرین.
فـرآیندهای مدیریتی:
هر آنچه که توی این قسمت در موردش صحبت میکنیم فقط و فقط جنبه مدیریتی داره و کـاربرها نباید به این مسائل اشراف داشته باشن. پس حواستون باشه مکانیزم هایی که در ادامه تشریح میشن رو وسط ایونت های بازیتون قرار ندین و در قالب یک پروژه جدا مخصوص خودتون (پنل مدیریتی) مکانیزم ها رو تعبیه کنین.
- * ایجاد دایرکتوری ذخیره سازی محتویات جیسون:
اگر قصد دارین برای اولین بار محتویات جیسون شامل توکن های جایزه رو ذخیره سازی کنین باید یک درخواست HTTP از نوع POST ارسال کنین. البته دو هدر Content-Type و Accept رو هم باید به نحوی تنظیم کنیم که متناسب با MIME جیسون (application/json) بشن. فرض کنیم میخوایم رشته جیسون زیر رو ذخیره سازی کنیم.
کد:
{"b412368":1610356715}
برای انجام این کار در سمت کانستراکت کافیه به شکل زیر ایونت بنویسین:
![[تصویر: sfkj.png]](https://s16.picofile.com/file/8420957734/sfkj.png)
شناسه ای که به شکل یک Pop-up بعد از ارسال موفقیت آمیز ریکوئست نمایش داده میشه رو حتماً باید برای پیگیری های آینده یکجا یادداشت کنین. شناسه ای که من بعد از ارسال درخواست POST به دست آوردم به شکل زیر بود:
کد:
c2ab25ac-53ee-11eb-8ac3-913a24b09ad1
- *بروزرسانی (Update) رشته جیسون ذخیره شده:
فرض کنین به هر دلیلی میخواین رشته جیسونی که ذخیره کردین رو ویرایش کنین. برای این منظور باید یک درخواست HTTP از نوع PUT ارسال کنین. البته دو هدر Content-Type و Accept رو هم باید به نحوی تنظیم کنیم که متناسب با MIME جیسون (application/json) بشن.
![[تصویر: %D8%B7%D8%B3%D9%84.png]](https://s17.picofile.com/file/8420959876/%D8%B7%D8%B3%D9%84.png)
دقت کنین که حتماً داشتن شناسه ای که در مرحله ایجاد دایرکتوری بهمون برگشت داده شد لازمه. در اینجا من این شناسه رو در قالب متغیر گلوبالی به نام ID تعریف کردم و رشته جیسون جدید رو در قالب متغیر گلوبالی به نام New_JSON تعریف کردم.
- *حذف (Delete) دایرکتوری ایجاد شده:
اگر قصد داشته باشین به هر دلیلی دایرکتوری که وب سرویس برای شما ایجاد کرده از بین بره (حذف بشه) باید یک درخواست HTTP از نوع DELETE ارسال کنین. البته دو هدر Content-Type و Accept رو هم باید به نحوی تنظیم کنیم که متناسب با MIME جیسون (application/json) بشن.
![[تصویر: jh.png]](https://s17.picofile.com/file/8420961434/jh.png)
دقت کنین که بعد از انجام عملیات حذف دایرکتوری، عملاً شناسه ای که در اختیار داریم باطل محسوب میشه و کارایی نداره. بنابراین باید اقدام به ساخت یک دایرکتوری جدید کنیم.
بررسی صحت توکن وارد شده از جانب کاربر:
اگر بخوایم صحت توکنی که کاربر وارد کرده رو اعتبارسنجی کنیم باید یک درخواست HTTP از نوع GET به شکل زیر ارسال کنیم. البته دو هدر Content-Type و Accept رو هم باید به نحوی تنظیم کنیم که متناسب با MIME جیسون (application/json) بشن. در نمونه زیر من یک تکست باکس و باتن (دکمه) قرار دادم. کـاربر با وارد کردن توکن جـایزه در تکست باکس و بعد هم کلیک بر روی دکمه (باتن) میتونه متوجه بشه که توکنی که وارد کرده معتبره یا خیر.
![[تصویر: %D8%B3%D8%A8%D8%AA.png]](https://s17.picofile.com/file/8420962784/%D8%B3%D8%A8%D8%AA.png)
جمع بندی و ذکر چند مسئله مهم:
شکی نیست که مطمئن ترین و بهترین روش استفاده از اسکریپت سمت سروری هست که خودمون نوشتیم. استفاده از API (وب سرویس) میتونه برای مقیاس کم و همینطور استفاده ابتدایی مناسب باشه اما برای مقیاس بزرگتر و در مواجهه با کاربران حرفه ای و نیاز حرفه ای تر کار دشوارتری رو در پیش داریم.
ایراداتی از نظر امنیتی به این روش وارده. هـر کـاربـری قادره تمامی اطلاعات جیسون ذخیره شده رو با آنالیز درخواست های HTTP و یا متغیرهای بازی مشاهده کنه. در ضمن کاربر حرفه ای میتونه به راحتی با به دست آوردن شناسه دایرکتوری شما کـه در قالب یک متغیر یا ثابت (Constant) تعریفش کردین و کمی آزمون و خطا عملاً کنترل ماجرا رو به دست بگیره و هر کاری دلش خواست انجام بده.
خلاصه کلام اینکه این روش میتونه کار راه انداز باشه ولی راه حل همیشگی شما نمیتونه باشه!
اگر احساس میکنین که نمیخواین کارتون رو الگوریتمیک و منظم در بیارین و نیازی به پنل مدیریت ندارین میتونین یک صفحه جداگانه در سرویس های وبلاگ مثل بلاگفا، رزبلاگ و ... بسازین و بعد به کمک AJAX (اِی جَکس) در سمت کانستراکت توکن های جایزه رو دریافت کنین و حالا با اکسپرشن هایی مثل
tokenat و ... پردازش های لازمه رو انجام بدین. اینطوری نیازی به استفاده از این وب سرویس (API) که راجع بهش بحث کردم ندارین. در انجمن هم قبلتر بارها راجع بهش بحث شده و حتی تا جایی که به خاطر دارم «محمد 82» یه تاپیک آموزشی با همین مضمون ایجاد کرده بود.
در هر حال شما با یکم خلاقیت و آزمون و خطا به سادگی میتونین یک پنل مدیریتی حرفه ای برای خودتون با اتکا به همین وب سرویس (API) درست کنین.
میتونین سورس ایونت هایی که تشریح کردم رو از
اینجا دانلود کنین.
موفق باشین.