بعد از مدتی سروکار داشتن با مفاهیم WCF ،Web API ،WCF REST و Web Service برای تهیه یک فریم ورک قوی، به این نتیجه رسیدم که اکثر برنامه نویسان در مقایسه بین مفاهیم یاد شده به مشکل میخورند. در این مطلب سعی بر این است که تفاوتهای اساسی آنها را بهصورت کلی بیان کنم.
دانت فریم ورک با بهرهگیری از این تکنولوژیها، امکاناتی را برای ایجاد HTTP سرویسها، به ما میدهد و قبل از بکارگیری لازم است انتخاب کنیم که از کدام تکنولوژی باید استفاده کنیم.
Web Service
1. پایهی آن براساس SOAP است و دادهها را در قالب XML به ما میدهد.
2. فقط از HTTP پروتکل پشتیبانی میکند.
3. متن باز نیست اما میتوان از آن در هر کلاینتی که از XML پشتیبانی میکند، استفاده کرد.
4. فقط بر روی IIS میتوان آنرا هاست کرد.
WCF
1. پایهی پیش فرض آن براساس SOAP است و دادهها را در قالب XML به ما میدهد.
2. تکامل یافتهی وب سرویسها است (ASMX) و از پروتکلهای مختلفی همچون TCP, HTTP, HTTPS, Named Pipes, MSMQ پشتیبانی میکند.
3. مشکل اصلی WCF در بد قلقی و گسترده بودن تنظیمات آن میباشد.
4. متن باز نیست، اما میتوان از آن در هر کلاینتی که از XML پشتیبانی میکند، استفاده کرد.
5. بر روی IIS یا برنامهها و یا ویندوز سرویسها، میتوان آنرا هاست کرد.
WCF REST
1. برای استفاده از WCF و WCF REST باید حتما webHttpBindings را فعال کرده باشید.
2. از دستور العملهای HTTP Get و HTTP POST با استفاده از ترکیب خصیصههای [WebGet] و [WebInvoke] ، پشتیبانی میکند.
3. برای فعال کردن سایر دستور العملهای HTTP باید تنظیماتی را در IIS انجام دهید، تا درخواستهایی که بر اساس دستورالعملهای ویژهی در فایل svc. میباشند را قبول کند.
4. ارسال دیتا به آن از طریق پارامتر، با استفاده از WebGet احتیاج به تنظیماتی دارد و یا UriTemplate باید مشخص شود.
5. از XML, JSON and ATOM پشتیبانی میکند.
Web API
1. یک فریم ورک جدید برای ساختن HTTP سرویس، یک راه ساده و آسان.
2. متن باز است و یک راه ایده آل برای ساخت REST-ful سرویسها بر روی دات نت فریم ورک.
3. برخلاف WCF Rest، سرویسهای آن از ویژگیهای کامل HTTP مانند ( URIs, request/response headers, caching, versioning various content formats) پشتیبانی میکنند.
4. همچنین از ویژگیهای کامل MVC از قبیل routing, controllers, action results, filter, model binders, IOC container or dependency injection, unit testing بهسادگی و قوی پشتیبانی میکند.
5. بر روی IIS و یا برنامهها، میتوان آنرا هاست کرد.
6. یک معماری سبک و مناسب برای دستگاههایی که پهنای باند محدودی دارند، مانند گوشیهای هوشمند.
7. پاسخها بوسیله Web API’s MediaTypeFormatter به صورت JSON, XML فرمت میشوند؛ و یا هر فرمتی را که شما میخواهید، بهعنوان MediaTypeFormatter اضافه کنید .
انتخاب بین WCF یا WEB API
1.انتخاب WCF زمانی مناسب است که شما میخواهید یک سرویس را ایجاد کنید که باید از سناریوهای مختلفی از قبیل پیغامهای یکطرفه و صف پیغامها و ارتباطات دو طرفه پشتیبانی کند و یا میخواهید یک سرویس را ایجاد کنید که از کانالهای انتقال سریع استفاده کند؛ از قبیل TCP و Named Pipes و یا شاید گاهی UDP در WCF 4.5 و همچنین میخواهید از HTTP پشتیبانی کند؛ وقتی که همهی کانالهای دیگر انتقال در دسترس نیستند.
2. انتخاب Web API زمانی مناسب است که شما میخواهید یک resource-oriented سرویس را بر روی HTTP ایجاد کنید. در اینجا میتوان از ویژگیهای کامل HTTP مانند URIs, request/response headers, caching, versioning, various content formats استفاده کرد و یا میخواهید سرویس را در معرض طیف گستردهای از کلاینتها شامل مرورگرها، موبایلها، iphone و تبلت قرار دهید.
با سلام. میخواستم فرق بین web api و wcf rest بدونم، این چیزی که من متوجه شدم زمانی از wcf rest استفاده کنیم که بخواهیم سناریوهای مختلفی از قبیل پیغامهای یکطرفه و صف پیغامها و ارتباطات دو طرفه پشتیبانی کند و یا میخواهید یک سرویس را ایجاد کنید که از کانالهای انتقال سریع استفاده کند؟ در غیر اینصورت پبشنهاد میشه که از web api استفاده کنیم؟
وحید نصیری در ۱۳۹۵/۰۵/۱۴ ۲۲:۳۱
WCF REST از سناریوهای مختلفی از قبیل پیغامهای یکطرفه و صف پیغامها و ارتباطات دو طرفه پشتیبانی نمیکند (WCF کامل هست که اینها را پشتیبانی میکند) و فقط REST هست مانند ASP.NET Web API. البته طراحی Web API از هر لحاظ نسبت به WCF REST کاملتر است و گزینهی ترجیح داده شدهی در این مورد (5 مورد WCF REST فوق را با 7 مورد Web API مقایسه کنید و نه با حالت دیگری).
پژمان در ۱۳۹۵/۰۵/۱۴ ۲۳:۲
در واقع در WebApi پاسخها را با فرمتهای مختلف که بخوایم مثلا CSV ، میتونیم فرمت کنیم اما در WCF REST فقط xml و json را داریم؟ اگه اینطوری باشه ما دیگه میتونیم WCF REST را deprecate بدانیم؟ چون دیگه لزومی به استفاده از آن وجود نداره؟.
وحید نصیری در ۱۳۹۵/۰۵/۱۴ ۲۳:۱۱
- در WCF REST هم میتوان خیلی از سفارشی سازیها را انجام داد، اما معماری آن قدیمی است و مورد چهارمی را که در مطلب فوق در حین توضیح Web API ذکر شدهاست، پشتیبانی نمیکند (و این موارد (مورد 4) دلیل اصلی اقبال به Web API هستند).
+ این مطلب هم ختم کلام است: WCF Is Dead and Web API Is Dying – Long Live MVC 6!
(برای کسانیکه به دنبال انتخاب فناوریهای آینده دار هستند)