در این پست از وبسایت پرووید در رابطه با ارتباط اپلیکیشن Xamarin Forms و ASP.NET Core Web API #3 صحبت خواهیم کرد. Xamarin Forms تکنولوژی مایکروسافت برای ساخت برنامه های cross-platform است.

در قسمت قبلی از آموزش در رابطه با ساخت پروژه ی ASP.NET Core صحبت کردیم.

خواندن ایتم ها

به منظور خواندن داده ها از متد List که در controller تعریف خواهیم کرد استفاده می کنیم. بدون شک باید [HttpGet] را به عنوان attribute این متد لحاظ کنیم تا به Web API بفهمانیم که این متد مسئول هندل کردن Get request ها می باشد. ضمناً route مربوط به action method در درون controller تنظیم شده است. می دانید که لزوماً نیازی به ذکر کردن action name در route ندارید. تنها کاری که باید از انجام شدن اطمینان حاصل کنید این است که هر action باید یک route یکتا داشته باشد. ضمناً، attribute های مربوط به routing می توانند در سطح controller و method لحاظ شوند. در آموزش routing در Web API در مورد این موضوع صحبت کرده ایم. کد زیر متد List را نشان می دهد.

[HttpGet]
public IActionResult List()
{
    return Ok(_toDoRepository.All);
}

در این متد یک response code به صورت 200 OK به همراه تمامی ToDoItem هایی که serialize شده اند برگردانده می شود. در رابطه با serialization توصیه می کنیم حتماً بسته ی آموزش ویدئویی سریالیزیشن در سی شارپ را استفاده کنید. ضمناً، شبیه تصویر زیر از Postman به منظور تست کردن Web API ای که تا اینجا ساخته ایم استفاده می کنیم.

در آموزش رایگان تست کردن Web API از وبسایت پرووید در رابطه با این موضوع بیشتر صحبت کرده ایم.

ساختن ایتم ها

بر اساس convention ها (قوانین پیش فرضی که در یک فریم ورک وجود دارند. می توانید در مورد convention ها در Entity Framework Core نیز مطالعه ای کنید.)، ساختن یک data item جدید به یک HTTP Post نگاشت خواهد شد. متدی که در ادامه خواهید دید Create نام دارد و [HttpPost] به عنوان یک attribute بر روی آن لحاظ شده است. علاوه بر این، یک شی از کلاس ToDoItem به عنوان پارامتر ورودی دریافت می کند. نام این پارامتر ورودی item است و از آنجایی که در یک متد POST پارامتر ووردی در request body قرار می گیرد، این پارامتر با [FromBody] اصطلاحاً تزئین و یا همان decorate شده است. لطفاً کد مربوط به این متد را مشاهده کنید.

[HttpPost]
public IActionResult Create([FromBody] ToDoItem item)
{
    try
    {
        if (item == null || !ModelState.IsValid)
        {
            return BadRequest(ErrorCode.TodoItemNameAndNotesRequired.ToString());
        }
        bool itemExists = _toDoRepository.DoesItemExist(item.ID);
        if (itemExists)
        {
            return StatusCode(StatusCodes.Status409Conflict, ErrorCode.TodoItemIDInUse.ToString());
        }
        _toDoRepository.Insert(item);
    }
    catch (Exception)
    {
        return BadRequest(ErrorCode.CouldNotCreateItem.ToString());
    }
    return Ok(item);
}

در بدنه ی این متد در ابتدا valid بودن پارامتر ورودی و اینکه از قبل بر روی بانک اطلاعاتی وجود نداشته باشد چک می شود و سپس اگر مشکلی وجود نداشت با استفاده از repository به دیتابیس اضافه می شود. شاید جالب باشد بدانید که repository یک design pattern است که ابتدا در domain driven design مطرح شد. در رابطه با design pattern ها در سی شارپ و همچنین سبک معماری domain driven design میتوانید بیشتر مطالعه کنید.

در متد Create با استفاده از ModelState.IsValid فرآیند model validation را انجام داده ایم که باید در هر API method ای که یک پارامتر ورودی را از کاربر دریافت می کند لحاظ شود.

موضوع دیگری که قصد داریم به آن اشاره کنیم یک enum است که با نام ErrorCode تعریف می شود و یک error code را به mobile client ارسال می کند. کد زیر این موضوع را نشان می دهد.

public enum ErrorCode
{
    TodoItemNameAndNotesRequired,
    TodoItemIDInUse,
    RecordNotFound,
    CouldNotCreateItem,
    CouldNotUpdateItem,
    CouldNotDeleteItem
}

در رابطه با enum ها در بسته ی آموزش ویدئویی شی گرایی در سی شارپ بیشتر مطالعه کنید. در ادامه با استفاده از Postman اقدام به تست کردن متد Create کنید. فقط فراموش نکنید که باید یک شی جدید از نوع ToDoItem را به صورت JSON در request body تعریف کنید و هم چنین در request header مورد Content-Type را به صورت application/json تنظیم کنید. این موضوع در تصویر زیر نشان داده شده است.

دقت کنید که متد Create شی جدیدی که ساخته شده است را در response بر می گرداند.

در قسمت بعدی از آموزش در رابطه با اپدیت کردن ایتم ها صحبت خواهیم کرد.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *