آموزش WebApi
بسم الله الرحمن الرحیم
آموزش WebApi
این دوره آموزشی مقدماتی می باشد، برای مطالعه سایر مقالات این دوره
بسم الله الرحمن الرحیم
آموزش WebApi
این دوره آموزشی مقدماتی می باشد، برای مطالعه سایر مقالات این دوره لطفا از طریق لینک زیر اقدام کنید.
مشاهده تمامی آموزش های دوره آموزش Web API
آموزش Web API– سطح مقدماتی
آموزش Web API
در قالب پروژه های MVC قالب جدیدی در خصوص ارسال و دریافت به روش معماری سرویس گرا و برنامه نویسی سرویس بر بستر HTTP به نام Web API معرفی گردید.
توضیحات تئوری بسیاری در راستای این تکنولوژی وجود دارد، ولی مهمترین مبحث، این است که اولا هدف از ارائه این روش منسوخ کردن روش WCF نیست بلکه استفاده از این تکنولوژی در بستر و ارسال و دریافت درخواست های مبتنی بر HTTP است.
این روش پیچیدگی های WCFرا در استفاده نخواهد داشت و به سادگی می توانید یک سرویس ساده تعریف کنید.
برای شروع کار یک پروژه MVC ایجاد کنید و در قالب مربوطه نوع web API را انتخاب کنید. حال در بخش مدل کلاس زیر را اضفه کنید
namespace MvcApplication1.Models
{
public class Employe
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public decimal salary { get; set; }
}
}
خوب هیچکار خاصی انجام ندادیم و تنها یک کلاس ساده برای کارمندان ایجاد کردیم، حال یک کنترلر را با نام Employe و نوع Empty Api controller ایجاد می کنیم و دستورات زیر را به آن اضافه می کنیم.
namespace MvcApplication1.Controllers
{
public class EmployeController : ApiController
{
Employe[] employes = new Employe[]{
new Employe{Id=1,FirstName="ESmaeil",LastName="SHeidaei",salary=1600000},
new Employe{Id=2,FirstName="Hasan",LastName="Abbasi",salary=800000},
new Employe{Id=3,FirstName="Reza",LastName="Moemeni",salary=600000}
};
public IEnumerable<Employe> GetAllEmploye()
{
return employes;
}
public Employe GetEmployeById(int id)
{
var emp = employes.FirstOrDefault(e=> e.Id==id);
if (emp==null)
{ var er= new HttpResponseMessage(HttpStatusCode.NotFound);
throw new HttpResponseException(er);
}
return emp;
}
public IEnumerable<Employe> GetEmployeByFirstName(string firstName)
{
return employes.Where(e=> e.FirstName.Equals(firstName,StringComparison.OrdinalIgnoreCase));
}
}
}
خوب در بخش اولیه از کلاس خودمان یک repository تعریف کرده ایم که تعدادی کارمند در آن اضافه شده است. در اکشن دوم (GetAllEmploye) یک دستور ساده برای بازیابی تمامی کارمندان ذکر شده است، در اکشن GetEmployeById بر اساس id یک کارمند را جستجو می کنیم اگر یافت نشود خطای مربوطه توسط شی HttpResponseMessage ارسال می گردد. درنهایت اکشن GetEmployeByFirstName بر اساس نام فرد را جستجو می کند.
وقت آن است که برنامه را تست کنیم F5 را بزنید.
در پنجره مرورگر باید آدرس اکشن خود را بنویسید، اما چند نکته را باید قبل از ارسال درخواست مد نظر قرار دهید.
برای تعیین و جامعیت دادن به پروژه های web api تمامی آدرس های این نوع پروژه ها به صورت زیر شروع می شوند:
http://localhost:{port number}/api/
اگر دقت کنید کلمه ثابت api قبل از نام هر کنترلر ذکر می شود که البته می توانید توسط WebApiConfig.Register که در فایل Global.asax وجود دارد آن را تغییر دهید
namespace MvcApplication1
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
}
مثلا من آن را به ساختار زیر تبدیل کرده ام، یعنی به جای api کلمه WCF را قید کردم، شما می توانید کلا این بخش را حذف کنید تا مشابه پروژه های MVC Web Application شود.
routeTemplate: "WCF/{controller}/{id}",
خوب برنامه را اجرا کنید و آدرس زیر را در مرورگر وارد کنید
http://localhost:{port number}/api/employe
این درخواست باعث می شود که اکشن ابتدایی ما که وظیفه چاپ تمامی اطلاعات را داشت اجرا شود .
http://localhost:{port number}/api/employe/1
این دستور باعث می شود که اکشن GetEmployeById اجرا گردد و تنها اطلاعات کارمند اول نمایش داده شود. حال اگر درخواست زیر را ارسال کنید خطای مربوطه که ما آن را مدیریت کردیم احراز می شود.
http://localhost:{port number}/api/employe/8
اکشن GetEmployeByFirstName نیز باید به صورت زیر فراخوانی شود:
http://localhost:{port number}/api/employe?firstname=reza
خوب سوالی که مطرح می شود وقتی ما برای اولین بار درخواست زیر را ارسال کردیم چرا تمامی کارمندان نمایش داده شدند در صورتی که نام اکشن ما، اکشن پیش فرض نبود
http://localhost:{port number}/api/employe
نکته ای که وجود دارد این جا است طبق الگوی MVC که مبتنی بر Convention over Configuration است در اینجا نیز این قوانین صادق است، قانونی که برای تعریف اکشن ها باید مدنظر قرار دهید به شرح زیر است
برای اکشن های نمایشی می بایست کلمهGet قبل از نام اکشن ذکر شود مثل، تمامی اکشن های ما که تعریف نموده ایم.
برای اکشن های درج می بایست قبل از نام اکشن کلمه Post ذکر شود.
برای اکشن های ویرایش می بایست قبل از نام اکشن کلمه Edit ذکر شود.
برای اکشن های حذف می بایست قبل از نام اکشن کلمه Delete ذکر شود.
امیر
با سلام
و ممنون از آموزش های خوبتون
یک سوال در مورد وب سرویس در ظMVC
فرض کنیم یک سایت گالری عکس داریم آیا میتوانیم با کمک وب سرویس این امکان را به کاربران بدهیم که با یک لینک از طرف ما در وبلاگ خود , بتوانند به صورت رندوم چند عکس را از سایت ما نمایش دهند ؟
یا برای این منظورم باید از روش های قدیمی مثل ifram استفاده شود ؟
اسماعیلشیدایی
با عرض سلام
علی
سلام