در مقاله قبلی ما با مفاهیم مهم Web API آشنا شدیم. شما میتونید اونارو اینجا بخونید.
- Web API با AJAX: درک درخواست POST در Web API
- Web API با AJAX: درک درخواست GET در Web API
- Web API با AJAX: در سرویس RESTful Web API درخواست قرار دهید
- Web API با AJAX: درک DELETE Verb در Restful Web API
- Web API با AJAX: از تابع GetJSON() برای دریافت داده های JSON استفاده کنید
- Web API با AJAX: درک نام و ویژگی روش در Web API
- Web API با AJAX: ویژگی FormBody و FormUri را در Web API درک کنید
- Web API با AJAX: ویژگی AcceptVerb را در Web API درک کنید
- Web API با AJAX: پارامترهای مختلف تابع jQuery Ajax().
- Web API با AJAX: درخواست بین دامنه ای AJAX را با استفاده از فعل POST انجام دهید
- Web API با AJAX: تماس بین دامنه AJAX با درخواست GET
- Web API با AJAX: انواع داده های مختلف را از سرویس Web API برگردانید
- Web API با AJAX: داده های فرم را پس از سریال سازی ارسال کنید
این مقاله یک مفهوم بسیار مهم از معماری MVC به نام " اعتبار سنجی مدل " را توضیح می دهد. همانطور که می دانیم MVC در بالای ASP.NET قرار دارد و Web API یک مکانیسم تامین داده است که بر روی معماری MVC ساخته شده است. ما می دانیم که بسیاری از مفاهیم MVC توسط Web API به ارث رسیده اند و Model Binding یکی از آنهاست.
اگر در اعتبارسنجی مدل بسیار تازه کار هستید، پاراگراف زیر برای شماست و اعتبارسنجی مدل در MVC و Web API بسیار شبیه هستند، وقتی مفهوم را فهمیدید می توانید آن را در هر جایی پیاده سازی کنید. می دانیم که معماری MVC ایده مدل، نمایش و کنترلر و جداسازی کامل نگرانی ها را ارائه می دهد.
اگر معماری سنتی سه لایه را با MVC مقایسه کنیم، متوجه میشویم که لایه DTO در بخش Model MVC که چیزی جز تعریف کلاس شناخته شده ما نیست، تکرار میشود. ما می دانیم که کلاس شامل بسیاری از ویژگی ها و اعضای داده است که دوباره با یک منطقه ذخیره سازی پایدار، اغلب ستونی از جدول پایگاه داده، نگاشت می شوند.
باشه خوبه. متوجه شدم اما چرا باید یک مدل را تایید کنیم؟ اجازه دهید سوال معکوس را بپرسم، چرا یک مدل را اعتبار سنجی نمی کنید؟ زیرا، می دانیم که داده هایی که موجودیت یک مدل در یک پایگاه داده ذخیره می شود. حال، اگر یک شی مدل را بدون اعتبارسنجی در حافظه دائمی خود ذخیره کنیم، چه آشفتگی رخ خواهد داد؟
اکنون، ممکن است بپرسید، راههای زیادی برای اعتبارسنجی دادههای ورودی وجود دارد و ما میتوانیم یکی از آنها را در برنامه خود بکار گیریم. بله، شما به خوبی چرخه عمر برنامه و مراحل را مشاهده کرده اید. حالا اجازه بدهید به این سوال پاسخ دهم.
به عنوان مثال، فرمی در برنامه شما وجود دارد که توسعه دهنده front-end در آن کار می کند. این مسئولیت اوست که فیلدهای ورودی را تأیید کند، اما اگر اشتباهی از سوی توسعهدهنده جلویی نتواند هر فیلدی را تأیید کند، نتیجه میتواند بر مرحله اعتبارسنجی مدل تأثیر بگذارد. حتی ممکن است اعتبار ورودی را در سطح DB نیز پیاده سازی کنید تا تأیید کنید که هیچ داده زباله در DB ذخیره نمی شود، به هر حال این حوزه مورد علاقه ما در این مقاله نیست.
اعتبار مدل را با استفاده از Annotation داده با یک مثال خواهیم دید. برای پیاده سازی این مثال، لطفاً یک برنامه آزمایشی از Web API ایجاد کنید و یک کنترلر API به برنامه اضافه کنید. در مثال خود ما کنترلر زیر را پیاده سازی کرده ایم.
- public class PersonController : ApiController
- {
- public bool Post([FromBody] person p)
- {
- if (ModelState.IsValid)
- {
- return true;
- }
- return false;
- }
- }
لطفاً توجه داشته باشید که کنترلر Person از ApiController به ارث رسیده است، نه کنترلر معمولی MVC. مزیت کنترلر Web API این است که می توانیم پیام HTTP را از کنترلر برگردانیم.
تنها یک روش در کنترلر وجود دارد که یک شی از مدل شخص را می گیرد (به زودی آن را ایجاد خواهیم کرد). در شرایط if ما در حال بررسی هستیم که آیا حالت مدل معتبر است یا خیر. اگر حالت مدل معتبر باشد، «درست» را برمیگردانیم و در غیر این صورت «نادرست» را برمیگردانیم، اگرچه بازگرداندن true/false از یک کنترلکننده API روش خوبی نیست، در مثال بعدی آن را تصحیح خواهیم کرد.
خوب، ما اکنون Model را پیاده سازی می کنیم و ویژگی را با ویژگی اعتبار سنجی تزئین می کنیم.
- public class person
- {
- [StringLength(7), Required]
- public string Name { get; set; }
- public string surname { get; set; }
- [Range(0, 99)]
- public Int16 age { get; set; }
- [RegularExpression("^[0-9]*$")]
- public string PhoneNo { get; set; }
- [RegularExpression(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$")]
- public string Email { get; set; }
}
این پیاده سازی مدل با 5 ویژگی است. ویژگی هر ویژگی بسیار توصیفی است و به راحتی قابل درک است. فراموش نکنید که موارد زیر را اضافه کنید:
با استفاده از System.ComponentModel.DataAnnotations;
ویژگی برای فعال کردن حاشیه نویسی داده ها در برنامه. خوب، ما راه اندازی خود را به پایان رساندیم. اکنون می توانیم برنامه را اجرا کنیم.
در اینجا قالبی از داده های JSON است که از بدنه درخواست ارسال می کنیم.