آموزشگاه برنامه نویسی تحلیل داده
آموزشگاه برنامه نویسی تحلیل داده

پشتیبانی ASP.NET Web API 2.1 از BSON

دوره های مرتبط با این مقاله

پشتیبانی ASP.NET Web API 2.1 از BSON

BSON چیست؟

BSON یک قالب serial کردن به صورت باینری می باشد. BSON مخفف Binary JSON می باشد اما نوع serial کردن BSON و JSON بسیار با هم تفاوت دارد. BSON یک JSON-like می باشد زیرا objectها به عنوان نماینده ای از جفت مقدار-نام (name-value pairs) شبیه به JSON می باشند. بر خلاف JSON، مقادیر عددی به صورت رشته ای و بایت ذخیره نمی شوند.

BSON برای آن طراحی شده است تا باعث سرعت بخشیدن به کدگذاری و کد گشایی، اسکن راحت و کمتر کردن حجم شود.

  • BSON را می توان در اندازه فایل نیز با JSON مقایسه کرد. با توجه به داده، ظرفیت انتقال در BSON ممکن است کوچکتر یا بزرگتر از JSON شود. برای serial کردن داده باینری مثل عکس، BSON حجم کمتری از JSON دارد زیرا داده باینری بر اساس کدگذاری 64 بیتی نمی باشد.
  • مستندات BSON آسان اسکن می شود زیرا عنصرها پیشوندی از رشته ها دارند . در نتیجه ، تفسیرگر(parser) می تواند بدون کدگشایی آن ها از عنصر ها عبور کند.
  • کدگذاری و کدگشایی بهینه تر می شود زیرا مقادیر عددی به صورت عددی و نه بصورت رشته ای ذخیره می شوند.

کاربران محلی مثل برنامه های .NET کاربر می توانند از مزایای استفاده از BSON در یک مکان متنی مثل JSON یا XML استفاده کنند.

خوشبختانه Web API از محتوای مذاکره ای (Content negotiation)استفاده می کند و API شما از هر دو قالب پشتیبانی می کند و به کاربر اجازه انتخاب می دهد.

فعالسازی BSON در سمت سرور

در تنظیمات Web API خود، BsonMediaTypeFormatter را به مجموعه قالب ها اضافه کنید.

public static class WebApiConfig
{
   public static void Register(HttpConfiguration config)
   {
       config.Formatters.Add(new BsonMediaTypeFormatter());
       // Other Web API configuration not shown...
   }
}

حالا اگر کاربر application/bson را درخواست کند، Web API از قالب BSON استفاده می کند.

برای وابسته کردن BSON به انواع دیگر داده ها، آن ها را به مجموعه SupportedMediaTypes اضافه کنید. کد زیر application/vnd.contoso را به انواع داده های پشتیبانی شده اضافه می کند:

var bson = new BsonMediaTypeFormatter();
bson.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/vnd.contoso"));
config.Formatters.Add(bson);

مثالی از HTTP Session

برای این مثال، ما از کلاس زیر به علاوه ی یک Controller Web API ساده استفاده می کنیم:

public class Book
{
   public int Id { get;set;}
   public string Title { get;set;}
   public string Author { get;set;}
   public decimal Price { get;set;}
   public DateTime PublicationDate { get;set;}
}
public class BooksController : ApiController
{
   public IHttpActionResult GetBook(int id)
   {
       var book = new Book()
       {
           Id = id,
           Author = "Charles Dickens",
           Title = "Great Expectations",
           Price = 9.95M,
           PublicationDate = new DateTime(2014, 1, 20)
       };
       return Ok(book);
   }
}

کاربر یک درخواست HTTP مشابه درخواست زیر می فرستد:

GET http://localhost:15192/api/books/1 HTTP/1.1
User-Agent: Fiddler
Host: localhost:15192
Accept: application/bson

و در اینجا پاسخ آن را می بینید:

Content-Type: application/bson;charset=utf-8
Date: Fri, 17 Jan 2014 01:05:40 GMT
Content-Length: 111
.....Id......Title.....Great Expectations..Author.....Charles Dickens..Price..........PublicationDate.........

در اینجا کاراکتر های باینری را با "." جا به جا می کنیم. تصویر زیر یک نمایه از مقادیر خام در Fiddler نشان می دهد.

آموزش Web Api

استفاده کردن از BSON با HttpClient

کاربران می توانند از برنامه های .NET در قالب BSON با HttpClient استفاده کنند. کد زیر یک درخواست GET که از BSON پشتیبانی می کند می فرستد و سپس ظرفیت انتقال BSON، پاسخ را deserial می کند.

HTTP/1.1 200 OK
static async Task RunAsync()
{
   using (HttpClient client = new HttpClient())
   {
       client.BaseAddress = new Uri("http://localhost");
       // Set the Accept header for BSON.
       client.DefaultRequestHeaders.Accept.Clear();
       client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/bson"));
       // Send GET request.
       result = await client.GetAsync("api/books/1");
       result.EnsureSuccessStatusCode();
       // Use BSON formatter to deserialize the result.
       MediaTypeFormatter[] formatters = new MediaTypeFormatter[] {
           new BsonMediaTypeFormatter()
       };
       var book = await result.Content.ReadAsAsync(formatters);
   }
}

برای درخواست BSON از سرور، مقدار سربرگ پذیرفته شده(Accept header) را application/bson قرار دهید.

client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new 
MediaTypeWithQualityHeaderValue("application/bson"));

برای deserial کردن پاسخ از BsonMediaTypeFormatter استفاده کنید. این قالب در قالب های پیش فرض موجود نیست بنابراین شما وقتی پاسخ را می خوانید باید آن را مشخص کنید.

MediaTypeFormatter[] formatters = new MediaTypeFormatter[] {
   new BsonMediaTypeFormatter()
};
var book = await result.Content.ReadAsAsync(formatters);

مثال بعدی نشان می دهد چطور یک درخواست POST که شامل BSON می شود بفرستید.

static async Task RunAsync()
{
   using (HttpClient client = new HttpClient())
   {
       client.BaseAddress = new Uri("http://localhost:15192");
       // Set the Accept header for BSON.
       client.DefaultRequestHeaders.Accept.Clear();
       client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/bson"));
       var book = new Book()
       {
           Author = "Jane Austen",
           Title = "Emma",
           Price = 9.95M,
           PublicationDate = new DateTime(1815, 1, 1)
       };
       // POST using the BSON formatter.
       MediaTypeFormatter bsonFormatter = new BsonMediaTypeFormatter();
       var result = await client.PostAsync("api/books", book, bsonFormatter);
       result.EnsureSuccessStatusCode();
   }
}

بسیاری از قسمت های این کد مثل قبل می باشد اما متد PostAsync مقدار BsonMediaTypeFormatter را به عنوان یک قالب مشخص می کند:

MediaTypeFormatter bsonFormatter = new BsonMediaTypeFormatter();
var result = await client.PostAsync("api/books", book, bsonFormatter);

serial کردن داده های اولیه سطح بالا

همه ی اسناد BSON یک لیست از جفت کلید مقدار ها(key/value pairs) می باشند. BSON یک ترکیب برای serial کردن یک مقدار مفرد خام برای نوع عددی و رشته ای تعریف نمی کند.

برای کار کردن در این سطح، BsonMediaTypeFormatter مربوط به داده های اولیه به صورت مقدار ویژه رفتار می کند. قبل از serial کردن، این مقدار را به key-value pair با کلید Value تبدیل می کند . برای مثال فرض کنید Controller API یک مقدار عددی را برگرداند:

public class ValuesController : ApiController
{
   public IHttpActionResult Get()
   {
       return Ok(42);
   }
}

قبل از serial کردن، قالب BSON این را به key-value pair تبدیل می کند.

{ "Value": 42 }

وقتی شما عمل deserial انجام می دهید، قالب ، اطلاعات برگشتی را به مقدار اصلی تبدیل می کند. با این حال، اگر Web API شما مقادیر خام را برگرداند، کاربران از یک تفسیرگر BSON متفاوت که بتواند این مورد را مدیریت کند استفاده می کنند.

  • 1005
  •    924
  • تاریخ ارسال :   1395/03/17

دانلود PDF دانشجویان گرامی اگر این مطلب برای شما مفید بود لطفا ما را در GooglePlus محبوب کنید
رمز عبور: tahlildadeh.com یا www.tahlildadeh.com
ارسال دیدگاه نظرات کاربران
شماره موبایل دیدگاه
عنوان پست الکترونیک

ارسال

آموزشگاه برنامه نویسی تحلیل داده
آموزشگاه برنامه نویسی تحلیل داده

تمامی حقوق این سایت متعلق به آموزشگاه تحلیل داده می باشد .