متن این ویدئو :

با عرض سلام و ادب کیایی هستم مدیر وب سایت dotnetexpert.ir و نویسنده‌ی پلتفرم خودکار

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

دوستان در این قسمت راجع به سرویس‌ها صحبت کنم اگر از ویدئوهای قبلی یادتان باشه تو قسمت مدیریت صفحات یک قسمتی به نام سرویس‌ها بود که گفتم بعدا توضیح می‌دهم. 

فرض کنید تو همین صفحه تاریخچه رویدادها که از یک سری سرویس استفاده کرده که قرار بود من براتون توضیح بدهم ببینید Framework خودکار که Service Oriented است، سرویس اورین تِد به چه معناست یعنی اینکه شما سرویس‌هایی که داخل وب سایتتان تعریف می‌کنید از خارج وب سایت هم قابل دسترس باشند یعنی شما بتونید همان سرویس‌ها را از داخل App تون یا از داخل برنامه دسکتاپتون روی ویندوز روی PC یا Macbook یا هر جایی دیگه خارج از وب سایتان بدون مشکل بتونید استفاده کنید هر عملی که داخل پلتفرم انجام میشه حتماً باید یک سرویس برایش تعریف شده باشه .

من حالا میام تو قسمت مدیریت سرویس‌ها الان همانطور که مشاهده می‌کنید ما یه عالمه اینجا سرویس داریم از سرویس‌های تستی گرفته تا سرویس‌های مدیریت فایل سیستم، سرویس‌های چهارچوب که حالا اون سرویس‌های اصلی Framework هستند مثل دریافت مجدد یک صفحه , تغییر قالب یک صفحه , آیا کاربر احراز هویت شده است , خروج از سیستم , دریافت یک صفحه , سرویس‌های توسعه یک سیستم , سرویس‌های امنیتی , سرویس‌های مدیریت محتوا , مثلا تو سرویس‌های مدیریت محتوا، سرویس‌های مدیریت لینک‌ها، که حالا سرویس‌های عمومی داریم سرویس‌هایی که نیاز به Authenticate و  authroize ندارند و سرویس‌هایی که نیاز به Authenticate  دارند .

ما دو نوع سرویس داریم در پلتفرم , سرویس‌هایی که براساس پروتکل HTTP هستند و سرویس‌هایی که براساس پروتکل odata یا opendata هستند سرویس‌هایی که براساس پروتکل HTTP هستند در اصل یه سری webapi هایی هستند که route شون اینجا است حالا مثلا همین ایجاد و ویرایش لینک این آدرسی که شما اینجا می‌بینید cms/link/save این از route است که مربوط به Webapi هایی است که برای save یک لینک اتفاق می‌افته و یک کد هم داره از این کد در اصل در جاوا اسکریپت صفحات ما داریم استفاده می‌کنیم .

مثلا من اگه اینجا صفحه مدیریت لینک‌ها را بیارم از قسمت مدیریت محتوا و مدیریت لینک‌ها را که از نوع فرم هست , همین‌طور که می‌بینید ما داریم asAjex می‌زنیم یک متد asAjax داریم که یک سری setting پیش فرض روی آن انجام شده ولی پشت صحنه همان Ajax JQuery است و URL آن , شما مشاهده می‌کنید به جای اینکه URL معمولی باشه از آن کدی که به این سرویس با آن URL دادیم داریم استفاده می‌کنیم این استفاده از کد واسطه هم یه سری مزایایی دارد که حالا اگه فرصت شد براتون توضیح میدم مثلا در runtime میتونید یه مقداری را Update کنید و در کل صفحاتتون هر جا از این کد استفاده شده این URLتون Update بشه بدون اینکه نیاز داشته باشید حالا تک تک صفحات را بخواهید Update کنید.

یه نوع دیگر از سرویس‌ها، سرویس‌های odata هستند سرویس‌هایی که از پروتکل opendata استفاده می‌کنند، پروتکل opendata پروتکلی است که به کاربران شما اجازه می‌دهد در سمت Client مستقیماً روی database شما Query بزنند یعنی همان‌طوری که شما روی database تون where clause می‌نویسید همین کار را مستقیماً از طرف Client انجام بدهید , خوب این مزایا و معایبی داره که من الان براتون توضیح می‌دهم.

 سرویس‌های مدیریت لینک‌ها یه قسمت است سرویس‌های odata لینک ها مثلاً دسترسی‌های کاربر جاری معایب opendata این است که اولاً نسبت به سرویس‌های HTTP که آن طرف حتماً دارید از Stored Procedure یا Entity Framework دارید استفاده می‌کنید یه مقدار کندتر است و مشکل دیگر امنیت است که خیلی خطرناکه و شما یک دروازه‌ای را باز می‌کنید از سمت Client که کاربران شما مستقیماً بتوانند روی databaseتون Query بسازند. 

اولاً مشخص نیست این کاربران، کاربر معمولی سایت هستند یا هَکِر هستند اگر فرض کنید کاربر معمولی باشه و نیت خیر داشته باشه میتونه لودبلانس database شما را ببره بالا یهویی می‌بینی که یک میلیون رکورد را fech کنه باید یه چهارچوب امنیتی مناسبی فراهم کرده باشیم که خطر این کار را بیاریم پایین تو پلتفرم یه معماری پیش فرضی داره که این امنیت را برقرار کرده شما می‌تونید برای توسعه وب سایتتون از این معماری الگو بگیرید و اون را پیاده‌سازی کنید و مزیتش این است که خیلی flexibel هست , یعنی شما بدون اینکه نیاز داشته باشید کد سمت سرور با #C کد بنویسید خیلی ساده از طریق Client بدون نیاز به آپدیت کردن کدتون میتونید سرویس جدید را به وب سایتتون اضافه کنید و وب سایتتون را توسعه بدهید و ما در پلتفرم خودکار Query که در سمت Client می‌نویسیم با جاواسکریپت است و با استفاده از یک Library به اسم BreezeJs در واقع اکثر 90 درصد query هایی که میتونید با Entity Framework بنویسید با  BreezeJs هم میتونید همون querys ها را میتونید با جاواسکریپت سمت Client بنویسید.

Ducument خیلی خوبی داره میتونید مطالعه کنید که با طرز query نوشتنش آشنا بشید خیلی شبیه linq است , مثلا الان شما می‌بینید که ما Predicate نوشتیم گفتیم Entity Type Id مساوی 101 باشه و Group Id آن 71 باشه، Language آن مساوی en، و Select زدیم ستون‌هایی که می خواهیم و Expand کردیم یعنی حتی آن Childentityهایی که وجود دارد را گفتیم برامون همراه Selectمون برداره بیاره حالا اگه اجازه بدهید من این Query ایی را که اینجا نوشته شده را براتون کامپایل کنم ما وقتی این را کامپایل می‌کنیم یه URL به ما میده که این URL دقیقاً همون پروتکل Opendata است ما روی URL تونستیم که فیلتر بزنیم و مثلا equal 71  GroupId و Language  مساوی equal en منتها این را مستقیم در پلتفرم URL استفاده نمی‌کنیم ما میایم URL را یک مرتبه پارامترایزش می‌کنیم به جای en گذاشتیم @lang و توی این صفحاتمون به جای @Lang میتونیم Fa را پاس بدهیم که فارسی را بیاره یا en را پاس بدیم که enها را بیاره.

البته همه را لازم نیست مثلاً اونهایی که را که نیاز نبوده را همون چیزی که این طرف بوده عددش را گذاشتیم و پارامتریک نکردیم حالا من برای اینکه نشان بدهم که چطوری این پارامترها را بهش پاس میدیم میرم تو مدیریت صفحات و قالب پیش فرض این سرویس در آن استفاده شده است را براتون میارم تو قالب پیش فرض توی اینجا خود فریم ورک یک متدی داره به اسم as Init Service که یک کد سرویس را میگیره و شما دونه دونه میتونید پارامترها را مقداردهی کنید اینجا پارامترها را مقداردهی کردیم مثلا برای @Lange گذاشته Fa شما قالب فارسی پیش فرض است به همین ترتیب می تونید سرویس ها را مقداردهی کنید.

سرویس های شما چه HTTP باشند چه odata یه سری قابلیت هایی دارند که میتونید شما روی آنها اعمال کنید مثلا همین سرویس‌های مدیریت لینک ها ایجاد ویرایش لینک که قبلا راجع بهش صحبت کردیم یک گزینه‌ای دارد به اسم ثبت وقایع سرویس که اگر شما این را روشن کنید هر رویداد یا Event که روی این سرویس می‌افته هر پارامتری که بهش پاس داده میشه هر درخواستی که روی این سرویس میشه برای شما Log میشه و شما میتونید آن را ببینید.

برای سرویس‌های odata فقط روی odataی ریشه شما این امکان را دارید چون روی تک تک odata این بی معنی است چون فیلترها متفاوت است این امکان وجود ندارد که ولی روی خود odataی پایه شما میتونید ثبت وقایع سرویس را ببینید و نکته آخر اینکه شما وقتی یک سرویس odata را کامپایل می‌کنید میتونید خروجی آن را هم ببینید من اینجا مثلا یک سرویس odata را انتخاب می کنم و دکمه کامپایل را می‌زنم همین جا تو مرورگر کروم F12 را می زنم تو کنسول می‌بینید که تک تک entity هایی که برامون آورده را شما میتونید اینجا ببینید امیدوارم این ویدئو براتون مفید بوده باشه.