ایجاد یک سرویس ساده با استفاده از ServiceStack

دوشنبه 21 دی 1394

ServiceStack یک فرمورک شبیه ASP.NET MVC و Web API, WCF است .که برای ساخت برنامه های تحت وب و سرویس مورد استفاده قرار می گیرد

ایجاد یک سرویس ساده با استفاده از ServiceStack

ServiceStack  یک فرمورک شبیه ASP.NET MVC و Web API, WCF است .که برای ساخت برنامه های تحت وب و سرویس مورد استفاده قرار می گیرد.فرمورک یک Platform مستقل است که برنامه های ساخته شده توسط آن در هر دو سکوی ویندوز و لینوکس قابل اجرا هستند .

در این مقاله ما یک سرویس rest ساده خواهیم ساخت که یک Note بر حسب Id داده شده برمی گرداند.اگر Id مورد نظر وجود نداشت کل Note ها برگرانده می شود .

نیازمندیهایی که احتیاج داریم

Visual Studio 2015

‘ServiceStack’ NuGet Package

یک پروژه از نوع mvc و از نوع Empty ایجاد کنید .یک فایل Global.asax به پروژه اضافه کنید.از داخل NuGet فرمورک  ServiceStack را بر روی برنامه خود نصب کنید .

فرمورک ServiceStack برای جابه جایی داده مورد استفاده قرار می گیرد.برای این نیاز داریم که کلاس های مختلفی برای پیام های درخواست و پاسخ ایجاد کنیم .در اینجا دو کلاس ایجاد می کنیم

افزودن کلاس های DTO برای درخواست و پاسخ

دو کلاس زیر را برای نمایش اطلاعات ورودی و خروجی DTO از سرویس مورد استفاده قرار می گیرند مشاهده کنید .

    [Route("/notes")]  
      [Route("/notes/{Id}")]  
      class NoteRequestDTO  
      {  
          public int? Id { get; set; }  
      }    
      class NoteResponseDTO  
      {  
          public string Note { get; set; }  
      }  

تعریف نگاشت مسیر برای درخواست DTO

کلاس NoteRequestDTO برای تعریف مسیر URL که در آن بتوان سرویس را اجرا کرد ، مورد استفاده قرار می گیرد.در این پروژه ما دو کلاس برای مسیریابی تعریف کرده ایم

[Route("/notes")] مسیری برای به دست آوردن تمام اطلاعات

[Route("/notes/{Id}")] مسیری برای به دست آوردن اطلاعات مربوط به یک note خاص

کلاس NotesService

این کلاس پیاده سازی سرویس را بیان می کند.این کلاس باید کلاس Service را به کلاس ServiceStack توسعه دهد .این کلاس یک متد به نام Any دارد که تمام انواع متدهای پروتکل HTTP را مدیریت می کند .این متد های همان طور که میدانید GET, POST, PUT and DELETE هستند.

این متدها یک درخواستی به کلاس DTO ارسال می کنند

    namespace NotesServer  
    {  
        class NotesService : Service  
        {  
            //Collection of Notes  
            private Dictionary<int, string> notes = new Dictionary<int, string>() {  
                                                            { 1, "Hello" },  
                                                            { 2, "World" } };  
      
            public object Any(NoteRequestDTO request)  
            {  
                //Check if the Note Id was passed in the Request.  
                if (!request.Id.HasValue)  
                {  
                    //Note Id is not present in the Request, hence return all Notes.  
                    var notesResponse = from note in notes  
                                            select new NoteResponseDTO {  
                                                Note = note.Value  
                                            };  
      
                    return notesResponse.ToList();  
                }  
      
                //Note Id is present in the Request. Check if there is a corresponding Note.  
                if (notes.ContainsKey(request.Id.Value))  
                {  
                    //Return the corresponding Note.  
                    return new NoteResponseDTO { Note = notes[request.Id.Value] };  
                }  
                else  
                {  
                    //Return Empty string as there is no corresponding Note.  
                    return string.Empty;  
                }  
            }  
        }  
    }  

NotesAppHost

سرویس ما در حال حاضر به Bootstrap احتیاج دارد .این کار با ساختن کلاسی که از AppHostBase مشتق می شود انجام خواهد شد.سازنده کلاس پایه نیاز دارد که با Service type به اصطلاح initialized شود .سپس متد abstract کارهای لازم برای پیکربندی را انجام میدهد.

namespace NotesServer.AppHost  
{  
    public class NotesAppHost : AppHostBase  
    {  
        public NotesAppHost() : base("Notes Service", typeof(NotesService).Assembly)  
        {  
  
        }  
  
        public override void Configure(Container container)  
        {  
  
        }  
    }  
}

افزودن Host Initialization

در متد Application_Start() و در فایل Global.asax کدهای زیر را وارد می کنیم .

    protected void Application_Start(object sender, EventArgs e)  
    {  
       new NotesAppHost().Init();  
    }  

ثبت ServiceStack با فرمورک ASP.Net

تنظیمات زیر را در داخل فایل web.config و در برچسب <system.web> وارد می کنیم

<system.webServer>  
  <validation validateIntegratedModeConfiguration="false" />  
  <handlers>  
    <add path="*" name="ServiceStack.Factory" type="ServiceStack.HttpHandlerFactory, ServiceStack"   
         verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" />  
  </handlers>  
</system.webServer> 

اجرای برنامه

اگر برنامه را اجرا کنید صفحه توضیحات برای شما باز خواهد شد که روش های مختلف اجرای سرویس را توضیح می دهد

برای گرفتن تمام Note ها برروی لینک مربوط به آن کلیک کنید شکل زیر را خواهید دید

برای دریافت یک Note خاص باز هم بر روی لینک آن کلیک کنید ، شکل زیر را خواهید دید

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید