PDA

View Full Version : مقایسه mvc controller و api controller



kamran.compiler
پنج شنبه 13 آبان 1395, 20:36 عصر
با سلام.
ما با استفاده از API Controller می توانیم اطلاعاتی در قالبJSON یا XML برگردانیم.
همچنبن با استفاده از MVC Controller می توانیم view و یا JSON و .... را برگردانیم.
جالا که MVC Controller قابلیت های API Controller را دارد دلیل استفاده از API چیست؟

Moien Tajik
جمعه 14 آبان 1395, 01:28 صبح
با استفاده از API شما میتونید یک Route کوتاه یا به اصطلاح REST داشته باشی .
خروجیه API Controller میتونه Data باشه یعنی در قالب Json , XML , ... اما در کنترلر معمولی mvc خروجی نمیتونه XML باشه فقط میتونید با JsonRsult یک Json برگردونید .
Web API از GET , POST , PUT , DELETE استفاده میکنه که در Ajax استفاده میشه و کار باهاش خیلی راحت هستش .

یه کدی که شما در کنترلر معمولی بخواید بنویسید و Json اون رو برگردونید :

public class TweetsController : Controller {
// GET: /Tweets/
[HttpGet]
public ActionResult Index() {
return Json(Twitter.GetTweets(), JsonRequestBehavior.AllowGet);
}
}


و همون کد در Web Api :

public class TweetsController : ApiController {
// GET: /Api/Tweets/
public List<Tweet> Get() {
return Twitter.GetTweets();
}
}


این هارو حتما ببینید :
http://www.c-sharpcorner.com/UploadFile/2b481f/difference-between-mvc-and-web-api/
http://encosia.com/asp-net-web-api-vs-asp-net-mvc-apis/

kamran.compiler
جمعه 14 آبان 1395, 01:52 صبح
پس یعنی میشه همون نتیجه ای که ازapi میگیریم از mvc بگیریم؟

Moien Tajik
جمعه 14 آبان 1395, 03:29 صبح
مثل استفاده از JavaScript و jQuery هستش . شما نتیجه ای که با JavaScript میگیری با jQuery هم یکی هست ، اما کدی که تو jQuery مینویسی کوتاه تر و قابل فهم تر هستش !
بستگی به استفادتون داره واگرنه خروجیتون میتونه یکی باشه .

hakim22
جمعه 14 آبان 1395, 11:07 صبح
با وجود اینکه کارکرد WebApi شباهت زیادی به Controller های MVC داره دلیل اصلی اینکه این دو از یک کلاس ارث بری نمی کنند و NameSpace جدا دارند بیشتر برمیگرده به زمان پیاده سازی این دو.
وقتی پروژه ی ASP MVC شروع شد ابزاری مانند OWIN یا قابلیتی به نام Self-Hosting برای آن در نظر گرفته نشده بود. همچنین همه ی ASP MVC روی کتابخانه System.Web.dll پیاده شده بود.

هدف مایکروسافت در پیاده سازی WebApi ایجاد ابزاری سبک و مستقل از ASP بود که بتواند داده ها در قالب Http در اختیار کاربر قرار دهید. به همین دلیل بجای ارث بری کردن از کنترلر MVC یک کلاس کاملا جدید پیاده کرد و با وجود اینکه بخش زیادی از کدهای پس زمینه کپی و پیست شده اند و عملکرد یکسانی دارند بعضی از ساختارها اصلاح شده اند و قسمتهایی از MVC که نیاز نبود حذف شده است تا بار ترافیکی کمتری به سرور اعمال کند. در WebApi می توانید خروجی برگردانید که طبق استانداردهای Http باشد. که ذر REST کاربرد زیادی دارد.

در نسخه ی جدید ASP Core این مشکل کاملا برطرف شده است و دیگر چیزی به نام ApiController وجود ندارد و می توانید درون یک کنترلر همزمان از WebApi در کنار ActionResult استفاده کنید. کلا خروجی اکشن های در نسخه ی جدید همیشه IActionResult است و همزمان می توانید خروجی View یا Json یا حتی پیامهای BadRequest و OK و ... مربوط به HTTP را به کلاینت برگشت دهید.

kamran.compiler
جمعه 14 آبان 1395, 12:47 عصر
با وجود اینکه کارکرد WebApi شباهت زیادی به Controller های MVC داره دلیل اصلی اینکه این دو از یک کلاس ارث بری نمی کنند و NameSpace جدا دارند بیشتر برمیگرده به زمان پیاده سازی این دو.
وقتی پروژه ی ASP MVC شروع شد ابزاری مانند OWIN یا قابلیتی به نام Self-Hosting برای آن در نظر گرفته نشده بود. همچنین همه ی ASP MVC روی کتابخانه System.Web.dll پیاده شده بود.

هدف مایکروسافت در پیاده سازی WebApi ایجاد ابزاری سبک و مستقل از ASP بود که بتواند داده ها در قالب Http در اختیار کاربر قرار دهید. به همین دلیل بجای ارث بری کردن از کنترلر MVC یک کلاس کاملا جدید پیاده کرد و با وجود اینکه بخش زیادی از کدهای پس زمینه کپی و پیست شده اند و عملکرد یکسانی دارند بعضی از ساختارها اصلاح شده اند و قسمتهایی از MVC که نیاز نبود حذف شده است تا بار ترافیکی کمتری به سرور اعمال کند. در WebApi می توانید خروجی برگردانید که طبق استانداردهای Http باشد. که ذر REST کاربرد زیادی دارد.

در نسخه ی جدید ASP Core این مشکل کاملا برطرف شده است و دیگر چیزی به نام ApiController وجود ندارد و می توانید درون یک کنترلر همزمان از WebApi در کنار ActionResult استفاده کنید. کلا خروجی اکشن های در نسخه ی جدید همیشه IActionResult است و همزمان می توانید خروجی View یا Json یا حتی پیامهای BadRequest و OK و ... مربوط به HTTP را به کلاینت برگشت دهید.

ممنون از پاسخ خوبتون.
من الان دارم در مورد api مطالعه می کنم. دقیقا رسیدم به web hosting و self hosting . میشه یکم در موردش توضیح بدین.ممنون میشم.
در ضمن OWIN چی هست؟