مدل بلوغ ریچاردسون چیست؟مدل بلوغ ریچاردسون چیست؟

مدل بلوغ ریچاردسون چیست؟

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

دسته بندی: توسعه نرم افزار
۱۲ دقیقه زمان مطالعه
۱۴۰۰/۰۹/۰۲
0 نظر
امتیاز 0 از 5

طراحی سیستم‌های Restful امروزه یکی از چالش‌های برنامه‌نویسی­ است زیرا این معماری در سطوح مختلف سیستم تاثیر بسزایی دارد و از عملکرد سیستم در سطح سرویسدهی تا تصمیمات افزایش مقیاس در سطح استراتژیک را تحت تاثیر قرار می­دهد. با ­توجه به این که این معماری در سطح بالا تعریف شده است و پیاده‌سازی آن دارای قوانین مطلق نیست، برنامه‌نویسان همواره به دنبال آزمودن سرویس­‌های خود برای انطباق با آن هستند. مدلهای مختلفی با در نظرگرفتن معیار­­­های خاص جهت انطباق باRest  ارائه شده‌­اند. در این مقاله ما انطباق سیستم با این معماری، از طریق سطوح مختلف تعریف شده در مدل ریچاردسون را بررسی می­کنیم.

معرفی معماری Rest

Rest نوعی معماری است که در سال 2000 توسط فیلدینگ، جهت طراحی سیستم­‌هایی با رویکرد کمینه کردن وابستگی ماژول‌­ها معرفی شد. به بیان دیگر، Rest مجموعه‌ای از محدودیت­‌های معماری است. این معماری قوانین سطح پایین عملیاتی را بر سیستم تحمیل نمی‌کند و توسعه‌دهنده می‌­تواند پیاده­‌سازی اختصاصی داشته باشد. 

Rest دارای شش محدودیت شامل کلاینت-سرور، سیستم لایه لایه، استقلال از وضعیت، واسط یکپارچه، قابلیت cache شدن و ارسال کد در صورت تقاضا1 است.

با‌­­ توجه به این که هدف مقاله بررسی مدل بلوغ ریچاردسون است، از توضیحات بیش‌تر در­مورد این معماری خودداری می‌­کنیم.

مزایای استفاده از معماری Rest

  • به لحاظ درک و پیاده‌سازی ساده است که این امر بهره­­‌وری تیم توسعه را بالا می‌­برد. بسیاری از افراد این معماری و http را می‌شناسند، بنابراین استفاده از آن برایشان راحت است.
  • سیستم را مقیاس‌پذیر­تر می­کند؛ زیرا  این معماری تاکید بر استقلال وضعیت دارد. به این معنا که هر درخواست، مستقل از دیگری پردازش می‌شود. اگر چنین محدودیتی را در نظر نگیریم، session یا state سمت سرور می‌­تواند ذخیره شود که این موضوع ما را در توسعه­ افقی با مشکلاتی مواجه می­‌کند و مقیاس‌­پذیری را دشوار­تر می‌­سازد. 
  • سیستم cache ساده‌تر است. cache در مقیاس پذیری و افزایش عملکرد سیستم‌­ها تاثیر بسزایی دارد. یک مکانیزم cache مناسب، متوسط زمان پاسخ سرور را کاهش می­‌دهد. چون در این معماری، سرور وضعیت ندارد و هر درخواست مستقل پردازش شده و باعث می­شود تا پیاده­‌سازی سیستم cache راحت­تر صورت پذیرد.
  • انعطاف­‌پذیری را افزایش می­‌دهد. این امر از جنبه­‌های مختلفی حاصل می­شود. برای مثال HATEOAS در این امر تاثیر بسزایی دارد. چرا که لینک‌­های مرتبط را در پاسخ باز می‌­گرداند که از hard code کردن APIها جلوگیری می­کند. بنابراین برای ما تغییر در سرویس­ها را با حداقل تغییر در سمت کلاینت ممکن می­سازد2.

معرفی مدل ریچاردسون

ریچاردسون در سال 2008 مدلی ارائه کرد که در آن وب‌سرویس‌ها را براساس تطابق آن­ها به REST  به چهار دسته تقسیم کرده است. به این مدل که میزان تطابق  را اندازه­گیری می­کند، مدل بلوغ ریچاردسون گفته می­شود. ریچاردسون سه فاکتور برای سنجش در نظر می­گیرد: URI،  HTTP Methods و HATEOAS 3

این مدل تنها معماری api را پوشش می‌دهد و مدل داده و دیگر فاکتور­ها را درنظر نمی‌­گیرد. مدل­‌های دیگری برای بررسی سایر فاکتور­ها ارائه شده است. برای مثال Amundsen Maturity Model برای بررسی مدل داده‌ها استفاده می‌­شود4.

در این مدل سطوحی تعریف شده است که در هر سطح با توجه به فرضیات جدیدی که اضافه می­‌شود، به بلوغ بیش‌تری دست پیدا می‌­کند.

سطوح مدل ریچاردسون

در ادامه برای توضیح سطوح مدل از مثال رستوران استفاده می­‌کنیم. در این مثال، سیستم ساده گرفتن لیستی از منو و در نهایت ثبت سفارش غذا را در نظر می­‌گیریم. این دو هدف، با­توجه به پیاده‌سازی فرضیات سطوح، به صورت‌های مختلفی طراحی شده است. 

سطح صفر (The Swamp of POX)

در این سطح، سرویس Restful نیست. سرویس‌های SOAP و XML-RPC-based در این قسمت قرار دارند.

فرضیات:

  • استفاده از فقط از یک URI برای تمام سیستم 
  • استفاده از یک نوع متد (معمولا post) برای تمامی عملیات‌ها5

در این سیستم رستوران، هر نوع درخواستی تنها با یک URI فرستاده می­شود که آنFoodService  است و بسته به نوع سرویس درخواستی، action های داخل بدنه درخواست، متفاوت است.6

مدل بلوغ ریچاردسون


سطح اول (URI)

فرضیات:

  • تمایز بین منابع در سطح URI
  • استفاده از یک نوع متد (معمولا post) برای تمامی عملیات­ها 

در مثال فوق، منابع در سرویس­ها نمود پیدا می­کنند. بنابراین غذاهای ایتالیایی، چینی و هندی، به صورت جداگانه در نظر گرفته می­شوند.

سطح دوم (HTTP)

فرضیات

  • تمایز بین منابع در سطح URI
  • تمایز متد HTTP بسته به سناریو درخواست
  • بازگرداندن خطا در بدنه­ پاسخ

در این قسمت، با توجه به ذات درخواست، از متد­های مناسب آن استفاده می­شود. برای مثال برای تغییر سفارش، از متد PUT استفاده می­کنیم.

سطح سوم (Hypermedia)

فرضیات

  • تمایز بین منابع در سطح URI
  • تمایز متد HTTP بسته به سناریو درخواست
  • بازگرداندن خطا در بدنه­ پاسخ
  • استفاده از لینک­ها جهت نشان دادن ارتباط بین منابع

در این سطح، رستوران با توجه به دانشی که در­مورد منبع دارد، سرویس­های مرتبط را به صورت لینک باز می­گرداند. برای مثال لینک مربوط به مخلفات اضافه­ پیتزا یا لینک مربوط به جزئیات سفارش را برمی­گرداند.

جمع‌بندی

در این مقاله ابتدا با معماری Rest به صورت اجمالی آشنا شدیم و اهمیت پیاده‌سازی آن را عنوان کردیم. سپس به بررسی سطوح مدل ریچاردسون که برای سنجش میزان انطباق به Rest ارائه شده، پرداختیم. نکته‌­ای که باید همواره در­نظر بگیریم این است که با توجه به سیستم خود بهترین تصمیم را برای آن اتخاذ کنیم و سعی در تطبیق سیستم به معماری نداشته باشیم. بلکه معماری مناسب با سیستم خود را انتخاب کنیم.

 

منابع

  1. restfulapi.net/rest-architectural-constraints
  2. freecodecamp.org/news/benefits-of-rest
  3. martinfowler.com/articles/richardsonMaturityModel.html
  4. devopedia.org/richardson-maturity-model
  5. restcookbook.com/Miscellaneous/richardsonmaturitymodel
  6. dzone.com/articles/richardson-maturity-model-and-pizzas