آموزش WebApi

آموزش 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 ذکر شود.

 

 

 

 

نظرات

  • Hannah Martinez
    امیر
    دو شنبه 11 دی 1278 - 0:00

    با سلام
    و ممنون از آموزش های خوبتون

    یک سوال در مورد وب سرویس در ظMVC
    فرض کنیم یک سایت گالری عکس داریم آیا میتوانیم با کمک وب سرویس این امکان را به کاربران بدهیم که با یک لینک از طرف ما در وبلاگ خود , بتوانند به صورت رندوم چند عکس را از سایت ما نمایش دهند ؟

    یا برای این منظورم باید از روش های قدیمی مثل ifram استفاده شود ؟

    • Judith Bell
      پاسخ
      اسماعیلشیدایی
      دو شنبه 11 دی 1278 - 0:00

      با عرض سلام


      بهترین روش برای اینکار ارسال اطلاعات به صورت json و stream می باشد، شما می بایست اطلاعات را Serialize کنید و سپس آن را برای کاربر ارسال کنید و در نهایت در سمت کلاینت این اطلاعات را Desalinize کنید.

      موفق باشید  


  • Hannah Martinez
    علی
    دو شنبه 11 دی 1278 - 0:00

    سلام

    ممنون از سخاوت شما در به اشتراک گذاری اطلاعاتتون
    امیدوارم همیشه سربلند، سلامت و موفق باشید
    یک سوال در زمینه web APi داشتم اگه راهنمایی کنید ممنون میشم
    من وب سرویس های یک پروژه را با web Api نوشتم و با استفاده از nuget راهنما وب سرویس را ایجاد کردم
    من می خوام یک Authorize برای صفحات راهنما داشته باشم تا هر کسی نتونه راهنما وب سرویس های من رو ببینه
    چطور یه صفحه لاگین برای راهنما بسازم که ربطی به اجرای خود وب سرویس ها نداشته باشه؟
    و اینکه در زمینه امنیت در وب سرویس چه نکاتی باید رعایت کنم
    یه چند تا کلمه کلیدی هم لطف کنید برای تحقیق بهم بدید یه دنیا ممنون میشم
    ممنونم

نظرات یا سوالات خودرا با ما درمیان بگذارید

0912 097 5516 :شماره تماس
0713 625 1757 :شماره تماس