معرفی API Analyzer

در این مقاله می خواهیم در مورد api ها صحبت کنیم و اینکه چگونه و کجا از آن استفاده کنیم و روش های استفاده از آن به چه صورت هست و در چه زمانی باید استفاده شود همین طور در مورد api ها منسوخ شده هم صحبت می نماییم.

معرفی API Analyzer

آیا تاکنون فکر کرده اید که کدام API نادرست است ؟و کدام یک را باید به جای آن استفاده کنید. یا مثلا از یک api استفاده کردید و سپس متوجه بشید که این را در ویندوز یا مک می توانید استفاده کنید.ایا تا به حال برای شما اتفاق افتاده است که یک کدی نوشته باشید و اشتباه باشد و شما در انتهای پروژه خودتان باشید. همه ی این موضوع ها با api analyzer بر طرف می شود و به شما اجازه می دهد تا باز خورد زنده ای را از استفاده از api  داشته باشید.

شما هم اکنون می توانید متخصص مجازی API داشته باشید!

API Analyzer یک تجزیه کننده Roslyn است که به عنوان بسته NuGet می آید. پس از اینکه به پروزه ی خود اضافه کردید به طور خودکار شروع به کار می کند و بر کد شما نظارت می کند و API ها فعال می شود این api در واقع تمام مشکلات احتمالی را مقابله می کنند و تمام کد های شما را تحلیل و تجزیه می نماید.

Api Analyzer در واقع برای ارزیابی سازگاری Api  با سیستم عامل های مختلف است ابتدا می خواهیم در مورد api های منسوخ شده صحبت نماییم و بررسی کنیم:

کشف api های منسوخ شده

چارچوب دات نت یک محصول بزرگ است که به طور مداوم ارتقا می یابد تا نیازهای مشتریان را بهتر کند، و رویکرد های ابتکاری را می دهد که می تواند مشکلات را حل نماید. بنابراین طبیعی است که تعدادی از API ها را از بین ببریم و آنها را با موارد جدید جایگزین کنیم. برای مثال، ما سه نسخه از پشته شبکه NET Framework را ساختیم. آخرین نسخه، HttpClient، در نظر گرفته شده برای جایگزینی WebClient و HttpWebRequest است. به عنوان یک توسعه دهنده ما چگونه باید متوجه شویم که از http client به جای webclient استفاده کنیم.مستنداتی وجود دارد اما ما معمولا زمانی که به مشکل می خوریم از Api های قدیمی استفاده می کنیم.

به طور مشابه، یک توسعه دهنده که از جاوا استفاده می کند در آن از ArrayList استفاده می کند، یک کلاس ArrayList در .NET پیدا می کند و از آن در کد خود استفاده می کند. فقط بعدا متوجه خواهد شد که ArrayList نامعتبر است و فهرست <T> توصیه می شود.

این دقیقا همان چیزی است که API Analyzer انجام می دهد: بلافاصله شما با پیشنهاد یک API جایگزین آن را پیشنهاد می دهد و اطلاعات دقیق خود را در مورد هر تماس به API متداول ارائه می دهد. پنجره خطا هشدارها را با یک شناسه منحصر به فرد در هر API رد شده (در مثال ما DE004) به شما می دهد. با کلیک کردن بر روی آن، شما به یک صفحه وب با اطلاعات دقیق درباره اینکه چرا API خاتمه یافته است و نحوه استفاده از API های جایگزین را می دهد

در برخی موارد شما باید از همان api های قدیمی خودتان استفاده کنید. در این موارد توصیه می کنیم هشدارهای خاص را نادیده بگیرید. این را می توان به راحتی با کلیک راست بر روی سورس مورد نظر Refactorings انجام شود. در اینجا شما دو گزینه را دریافت خواهید کرد: محلی (در منبع) یا در سطح جهانی (در یک فایل). ما طراحان را تشویق می کنیم که از سطح جهانی استفاده کنند؛ از اینرو اگر تصمیم گرفته اید که از بعضی از API هایی که دارای محدودیت هستند استفاده کنید، بهتر است از آن در همه جا در پروژه استفاده کنید.

کشف مسائل مربوط به cross پلت فرم

در حالی که .NET یک پلت فرم متقابل است، برخی از API های آن در همه سیستم عامل ها در دسترس نیستند. همچنین انواع موجود در تمام سیستم عامل ها وجود دارد، اما برخی از اعضا از هر پلتفرم پشتیبانی نمی شوند. یک مثال خوب Console.WindowWidth است که در ویندوز، اما در لینوکس و macOS کار نمی کند. اگر برنامه شما در لینوکس یا maxOS اجرا شود،  apiیک تماس به Console.WindowWidth PlatformNotSupportedException را اجرا خواهد کرد.  Analyzer به شما اطلاع می دهد که API پشتیبانی نمی شود، که در حقیقت شما هنوز هم در حال ویرایش کد هستید که به شما در حل مشکل کمک می کند. حتی اگر در این لحظه فقط یک پلتفرم را هدف قرار دهید، اهداف کسب و کار شما در آینده ممکن است تغییر کند و شما باید زمان زیادی را صرف استفاده از کد خود بکنید .

تجربه تحلیلگر مسائل مربوط به مسائل متقابل پلتفرم بسیار شبیه به API های منسوخ است: شما در یک لیست خطا لیست یک اشکال و یک شناسه تشخیصی خواهید دید و شما می توانید خطا را با کلیک راست و انتخاب کردن، Refactorings را مهار کنید

شما api های منسوخ را استفاده می کنید یک سری گزینه برای آلارم های سیستم عامل های خاص وجود دارد .

اگر شما فقط قصد دارید کد خود را در یک زیر مجموعه خاص از سیستم عاملها (مثلا فقط ویندوز و لینوکس، اما macOS) پشتیبانی کنید. برای انجام این کار، فقط باید فایل پروژه خود را ویرایش کنید و PropertyCompatIgnore را اضافه کنید که تمام سیستم عامل ها را نادیده می گیرد:

<PropertyGroup>
    <PlatformCompatIgnore>Linux;MacOSX</PlatformCompatIgnore>
</PropertyGroup>

اگر کد شما یک سیستم عامل چندگانه را هدف قرار داده و می خواهید از یک API استفاده کنید که در بعضی از آنها پشتیبانی نمی شود، می توانید بخشی از آن را با یک دستور if-call RuntimeInformation.IsOSPlatform () محافظت کنید

if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
     var w = Console.WindowWidth;
     // More code
}

در آینده، ما در نظر داریم که این کد امنیتی را به طور خودکار ایجاد کنیم، هنگامی که روی API کلیک کنید از پلت فرم استفاده می کنید. شما همچنین می توانید مشروط بر هر چارچوب / سیستم عامل هدف کامپایل کنید، اما باید این را نیز به صورت دستی انجام دهید.

تشخیص های پشتیبانی شده

در حال حاضر تحلیلگر موارد زیر را مدیریت می کند:

    - استفاده از یک استاندارد .NET که PlatformNoSupportedException (PC001) را اجرا می کند
    - استفاده از API استاندارد دات نت که در دات نت چارچوب 4.6.1 در دسترس نیست
    - استفاده از یک API بومی که در UWP وجود ندارد
    - استفاده از یک API که علامت گذاری شده به عنوان ضعیف

پیکربندی

کاربر می تواند تصمیم بگیرد که چگونه می تواند این تشخیص ها را اطلاع بدهد به عنوان مثال شما می توانید این را به صورت جداگانه توسط شناسه تشخیصی و با پروژه پیکربندی کنید. برای انجام این کار در درخت پروژه خود -> وابستگی -> آنالیزورها -> Microsoft.DotNet.Analyzers.Compatibility، با کلیک راست بر روی شناسه تشخیصی و تنظیم مقررات تنظیم شدت و گزینه دلخواه را انتخاب کنید.

خط فرمان و ادغام پیوسته (CI)
همه این تشخیصها نه تنها در IDE در دسترس هستند، بلکه زمانی که شما در خط فرمان، که شامل سرور CI است، ایجاد می کنید. این به شما اجازه می دهد تا هر کدام از سیاست هایی که برای تشخیص فرد در کل تیم تعیین کرده اید را اجرا کنید.

خلاصه

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