چکیده: استفاده از پایگاه داده MongoDB با Web API و ASP.NET Core برای عملیات CRUD
MongoDB یک پایگاه داده مبتنی بر سند از نوع NoSQL میباشد که با استفاده از آن میتوانید مستندات مبتنی بر JSON ایجاد نمایید که مستقل از schema هستند. در اینجا schema میتواند با جداول در یک پایگاه داده رابطه ای map شود. یک schema در MongoDB یک collection نامیده میشود و یک رکورد در این schema،سند (document) نامیده میشود.
در وب اپلیکیشن های مدرن اوپن سورس، استفاده از یک پایگاه داده NoSQL به دلیل رفتار غیررابطه ای، محبوبیت زیادی دارد. در این مقاله، ما قصد داریم با استفاده از ASP.NET Core، یک Web API ایجاد نماییم که عملیات CRUD را روی یک collection ایجاد مینماید. نمودار زیر، پیاده سازی این اپلیکیشن را شرح میدهد:
مزیت Web API این است که میتواند به عنوان سرویسهای HTTP مورد استفاده قرار بگیرد و به هر نوع اپلیکیشن سرویس گیرنده ای از دسکتاپ تا دستگاه های موبایل سرویس ارائه دهد. این اپلیکیشن های سرویس گیرنده با استفاده از Web API به عنوان یک رسانه، میتوانند به آسانی با یک پایگاه داده NoSQL مانند MongoDB ارتباط برقرار نمایند.
Web API و MongoDB – پیاده سازی
شما MongoDB را برای ایجاد collection ها و ذخیره اسناد درآن نیاز دارید. MongoDB را میتوانید از این لینک دانلود نمایید. دیتابیس را نصب نمایید. زمانی که نصب تمام شد، درایو سیستم، یک پوشه MongoDB در مسیر زیر ایجاد مینماید:
C:\Program Files\MongoDB |
ما باید یک پوشه برای ذخیره داده ها ایجاد نماییم. من بر روی سیستم خودم مسیر E:\MongoDbData\data را ایجاد کرده ام.
Command prompt را باز کنید و به پوشه زیر navigate کنید:
C:\Program Files\MongoDB\Server\3.2\bin |
و دستور را مانند شکل زیر اجرا نمایید:
این دستور باعث اتصال به MongoDB بر روی پورت 27017 میشود.
یک پنجره دیگری از command prompt را باز کنید و به پوشه bin بروید و سپس دستور زیر را اجرا کنید:
این دستور به دیتابیس پیشفرض test وصل میشود. دستور زیر را اجرا کنید > (command prompt)
> use EmployeeDB |
این دستور، یک دیتابیس به نام EmployeeDB اگر از قبل وجود نداشته باشد ایجاد میکند در غیر اینصورت آن را برای انجام تراکنشها باز میکند. در این دیتابیس، ما میتوانیم با استفاده از دستور زیر، تراکنش ایجاد نماییم:
db.createCollection( 'Products' ) |
Schema برای کالکشن Products، با استفاده از دستور زیر در command prompt میتواند تعریف شود:
db.Products.insert({ 'ProductId' :1, 'ProductName' : 'Desktop All in One' , 'Price' :43000, 'Category' : 'Electronics' }) |
دستور زیر را اجرا کنید:
>db.Products.find({}) |
نتیجه به صورت زیر نمایش داده خواهد شد:
schema، ویژگی id_ را اضافه میکند. این ویژگی یک ObjectId است که به صورت خودکار تولید میشود.
حال، از آنجایی که کالکشن و دیتابیس آماده است، ما میتوانیم یک اپلیکیشن Web API ایجاد نماییم.
ایجاد اپلیکیشن MongoDB
ما از Visual Studio 2015 برای ایجاد این اپلیکیشن استفاده میکنیم. ما باید ASP.NET Core را نصب نماییم که میتوانید آن را از این لینک دانلود نمایید.
مرحله 1: ویژوال استودیو را باز کنید و یک ASP.NET Core Web Application جدید همانند شکل زیر بسازید:
نام این اپلیکیشن را MVC6_WEBAPI_MongoDB بگذارید. روی OK کلیک کنید که در نتیجه پنجره ASP.NET Templates نمایش داده میشود. مانند شکل زیر، Web API را انتخاب کنید:
در نتیجه یک پروژه از نوع Web API ایجاد میشود.
مرحله 2: فایل project.json را باز کنید و در قسمت dependencies، پکیج dependency زیر را اضافه کنید:
"mongocsharpdriver": "2.3.0" |
پروژه را ذخیره کنید تا درایور Mongo CSharp در سیستم نصب شود.
مرحله 3: در پروژه، پوشه Models را اضافه کنید. در این پوشه، یک کلاس جدید به نام Product.cs ایجاد نمایید. سپس کد زیر را در این کلاس اضافه کنید:
using MongoDB.Bson; using MongoDB.Bson.Serialization.Attributes; namespace MVC6_WEBAPI_MongoDB.Models { public class Product { public ObjectId Id { get ; set ; } [BsonElement( "ProductId" )] public int ProductId { get ; set ; } [BsonElement( "ProductName" )] public string ProductName { get ; set ; } [BsonElement( "Price" )] public int Price { get ; set ; } [BsonElement( "Category" )] public string Category { get ; set ; } } } |
این کلاس، ویژگی Id از نوع ObjectId را شامل میشود. این ویژگی الزامی میباشد طوریکه آبجکت CLR میتواند با Collection در MongoDB مپ گردد. این کلاس شامل خصوصیات به همراه ویژگی BsonElement بر روی آنها میباشد. این attribute، نمایانگر این است که ویژگی با کالکشن MongoDB مپ شده میباشد.
مرحله 3: فایل کلاس DataAccess.cs را در پوشه Models به همرا کد زیر اضافه کنید:
using MongoDB.Bson; using MongoDB.Driver; using MongoDB.Driver.Builders; using System.Collections.Generic; namespace MVC6_WEBAPI_MongoDB.Models { public class DataAccess { MongoClient _client; MongoServer _server; MongoDatabase _db; public DataAccess() { _client = new MongoClient( "mongodb://localhost:27017" ); _server = _client.GetServer(); _db = _server.GetDatabase( "EmployeeDB" ); } public IEnumerable<Product> GetProducts() { return _db.GetCollection<Product>( "Products" ).FindAll(); } public Product GetProduct(ObjectId id) { var res = Query<Product>.EQ(p=>p.Id,id); return _db.GetCollection<Product>( "Products" ).FindOne(res); } public Product Create(Product p) { _db.GetCollection<Product>( "Products" ).Save(p); return p; } public void Update(ObjectId id,Product p) { p.Id = id; var res = Query<Product>.EQ(pd => pd.Id,id); var operation = Update<Product>.Replace(p); _db.GetCollection<Product>( "Products" ).Update(res,operation); } public void Remove(ObjectId id) { var res = Query<Product>.EQ(e => e.Id, id); var operation = _db.GetCollection<Product>( "Products" ).Remove(res); } } } |
کد بالا از کلاسهای زیر استفاده میکند:
MongoServer – ارائه دهنده یک instance از MongoDB Server میباشد.
MongoClient – این کلاس برای خواندن instance از سرور برای انجام عملیات روی دیتابیس مورد استفاده قرار میگیرد. سازنده این کلاس با رشته اتصال MongoDB زیر پاس داده شده است:
"mongodb://localhost:27017" |
MongoDatabase – این ارائه دهنده دیتابیس Mongo برای انجام عملیات است. این کلاس، متدهای زیر را ارائه میدهد:
- GetCollection<T>(collection)
- . T آبجکت CLR است که collection میباشد.
- . این متد MongoCollection را برمیگرداند.
- متدها
- FindAll() – تمام سندها در collection را برمیگرداند.
- FindOne() – یک سند مبتنی بر اساس _id را با استفاده از کوئری Mongo برمیگرداند.
- Save() – یک سند جدید را در collection ذخیره میکند.
- Update() – یک سند را آپدیت میکند.
- Remove() – یک سند را حذف میکند.
کد بالا از تمام این متدها برای عملیات CRUD استفاده میکند.
مرحله 4: ما کلاس DataAccess را در ویژگی Dependency Injection ارائه شده در ASP.NET Core، ثبت میکنیم. برای این امر، فایل Startup.cs را باز کنید و خط زیر را در متد ()ConfigureServices اضافه نمایید:
public void ConfigureServices(IServiceCollection services) { services.AddTransient<DataAccess>(); services.AddMvc(); } |
مرحله 5: در پوشه Controllers ، یک Web API Controller جدید به نام ProductAPIController همانند شکل زیر ایجاد نمایید:
در این کلاس، کد زیر را اضافه نمایید:
using System.Collections.Generic; using Microsoft.AspNet.Mvc; using MVC6_WEBAPI_MongoDB.Models; using MongoDB.Bson; namespace MVC6_WEBAPI_MongoDB.Controllers { [Route( "api/Product" )] public class ProductAPIController : Controller { DataAccess objds; public ProductAPIController() { objds = d; } [HttpGet] public IEnumerable<Product> Get() { return objds.GetProducts(); } [HttpGet( "{id:length(24)}" )] public IActionResult Get( string id) { var product = objds.GetProduct( new ObjectId(id)); if (product == null ) { return NotFound(); } return new ObjectResult(product); } [HttpPost] public IActionResult Post([FromBody]Product p) { objds.Create(p); return new HttpOkObjectResult(p); } [HttpPut( "{id:length(24)}" )] public IActionResult Put( string id, [FromBody]Product p) { var recId = new ObjectId(id); var product = objds.GetProduct(recId); if (product == null ) { return HttpNotFound(); } objds.Update(recId, p); return new OkResult(); } [HttpDelete( "{id:length(24)}" )] public IActionResult Delete( string id) { var product = objds.GetProduct( new ObjectId(id)); if (product == null ) { return NotFound(); } objds.Remove(product.Id); return new OkResult(); } } } |
کلاس Web API بالا از کلاس DataAccess برای عملیات CRUD استفاده میکند. این کلاس Web API شامل متدهای GET, POST, PUT و DELETE برای عملیات Http میباشد.
مرحله 5: launchSettings.json را در پوشه Properties باز کنید و تنظیمات زیر را در آن قرار دهید:
"profiles" : { "IIS Express" : { "commandName" : "IISExpress" , "launchBrowser" : true , "launchUrl" : "api/Product" , "environmentVariables" : { "Hosting:Environment" : "Development" } } |
این قطعه کد، launchUrl را برای اجرای اپلیکیشن در IIS Express تعیین میکند.
اپلیکیشن را در مرورگر اجرا نمایید. نتیجه به شکل زیر نمایش داده خواهد شد:
برای تست ما از ابزار Fiddler استفاده میکنیم. ابزار Fiddler را باز کنید و URL زیر را در آن وارد نمایید:
روی دکمه Execute کلیک کنید و نتیجه به صورت زیر نمایش داده میشود:
برای Post کردن داده ها، جزییات زیر را در Fiddler وارد نمایید:
روی دکمه Execute کلیک کنید تا داده ها ارسال شوند. دستور زیر را از Mongo Command prompt اجرا نمایید:
>db.Products.find({}) |
نتیجه به صورت زیر نمایش داده میشود:
نتیجه گیری: با استفاده از درایور #Mongo c ما میتوانیم به راحتی به دیتابیس محبوب MongoDB برای عملیات CRUD متصل شویم. با استفاده از ASP.NET WebAPI، داده های MongoDB به راحتی میتواند برای تمام اپلیکیشنهای سرویس گیرنده جهت ذخیره و خواندن داده ها در دسترس قرار بگیرد.
برای دانلود سورس برنامه اینجا کلیک نمایید.
سلام،
مقاله خوبی بود.
تشکر
سلام
ممنون
موفق باشید