طراحی سیستمهای Restful امروزه یکی از چالشهای برنامهنویسی است؛ چرا که این روش از طراحی نرمافزار در سطوح مختلف سیستم تاثیر زیادی دارد و از عملکرد سیستم در سطح سرویسدهی تا تصمیمات افزایش مقیاس در سطح استراتژیک را تحت تاثیر قرار میدهد. با توجه به این که این معماری در سطح بالا تعریف شده است و پیادهسازی آن دارای قوانین مطلق نیست، برنامهنویسها همیشه به دنبال تست سرویسهای خود برای انطباق با آن هستند. مدلهای مختلفی با در نظرگرفتن معیارهای خاص جهت انطباق با Rest ارائه شدهاند. در این مقاله قصد داریم مدل بلوغ ریچاردسون (Richardson Maturity Model) را مورد بررسی قرار دهیم. در حقیقت این مقاله انطباق سیستم با این معماری، از طریق سطوح مختلف تعریف شده در مدل ریچاردسون را بررسی میکند.
معرفی معماری Rest
Rest نوعی معماری است که در سال ۲۰۰۰ توسط فیلدینگ، جهت طراحی سیستمهایی با رویکرد کمینه کردن وابستگی ماژولها معرفی شد. به بیان دیگر، Rest مجموعهای از محدودیتهای معماری است. این معماری قوانین سطح پایین عملیاتی را بر سیستم تحمیل نمیکند و توسعهدهنده میتواند پیادهسازی اختصاصی خود را داشته باشد.
Rest دارای شش محدودیت زیر است:
- کلاینت-سرور
- سیستم لایه لایه
- استقلال از وضعیت
- واسط یکپارچه
- قابلیت cache شدن
- ارسال کد در صورت تقاضا
مزایای استفاده از معماری Rest
- درک و پیادهسازی معماری Rest ساده است و در نتیجه بهرهوری تیم توسعه بیشتر میشود. بسیاری از افراد با این معماری نرم افزار و http آشنا هستند و استفاده از آن برایشان راحت است.
- به دلیل تاکید بر استقلال وضعیت، سیستم را مقیاسپذیرتر میکند؛ به این معنا که هر درخواست، مستقل از دیگری پردازش میشود. اگر چنین محدودیتی را در نظر نگیریم، session یا state میتواند سمت سرور ذخیره شود که این موضوع توسعه افقی را سخت و مقیاسپذیری را سختتر میکند.
- سیستم cache سادهتر است. cache در مقیاس پذیری و افزایش عملکرد سیستمها تاثیر چشمگیری دارد. یک مکانیزم cache مناسب، متوسط زمان پاسخ سرور را کاهش میدهد. چون در این معماری، سرور وضعیت ندارد و هر درخواست مستقل پردازش شده و باعث میشود تا پیادهسازی سیستم cache راحتتر باشد.
- انعطافپذیری را در بخشهای مختلف افزایش میدهد. برای مثال HATEOAS تاثیر زیادی در این فرایند دارد. چرا که لینکهای مرتبط را در پاسخ باز میگرداند که از hard code کردن APIها جلوگیری میکند. بنابراین تغییر در سرویسها با حداقل تغییر در سمت کلاینت ممکن میشود.
معرفی مدل بلوغ ریچادسون
ریچاردسون در سال ۲۰۰۸ مدلی ارائه کرد که در آن وبسرویسها را براساس تطابق آنها با REST به چهار دسته تقسیم کرده است. به این مدل که میزان تطابق را اندازهگیری میکند، مدل بلوغ ریچاردسون گفته میشود. ریچاردسون سه فاکتور را برای سنجش تطابق در نظر میگیرد: URI ،HTTP Methods و HATEOAS
این مدل تنها معماری Api را پوشش میدهد و مدل داده و دیگر فاکتورها را درنظر نمیگیرد. مدلهای دیگری برای بررسی سایر فاکتورها ارائه شده است. برای مثال Amundsen Maturity Model برای بررسی مدل دادهها استفاده میشود.
در این مدل سطوحی تعریف شده است که در هر سطح با توجه به فرضیات جدیدی که اضافه میشود، به بلوغ بیشتری دست پیدا میکند.
سطوح مدل ریچاردسون
در ادامه برای توضیح سطوح مدل بلوغ ریچادسون از مثال رستوران استفاده میکنیم. در این مثال، سیستم ساده گرفتن لیستی از منو و در نهایت ثبت سفارش غذا را در نظر میگیریم. این دو هدف، باتوجه به پیادهسازی فرضیات سطوح، به صورتهای مختلفی طراحی شده است.
سطح صفر (The Swamp of POX) مدل بلوغ ریچادسون
در این سطح، سرویس Restful نیست. سرویسهای SOAP و XML-RPC-based در این قسمت قرار دارند.
فرضیات:
- استفاده از فقط یک (URI (Universal Resource Identifier برای تمام سیستم
- استفاده از یک نوع متد (معمولا post) برای تمامی عملیاتها
در این سیستم رستوران، هر نوع درخواستی تنها با یک URI فرستاده میشود که آن FoodService است و بسته به نوع سرویس درخواستی، actionهای داخل بدنه درخواست، متفاوت است.
سطح اول (URI) مدل بلوغ ریچادسون
فرضیات:
- تمایز بین منابع در سطح URI
- استفاده از یک نوع متد (معمولا post) برای تمامی عملیاتها
در مثال فوق، منابع در سرویسها نمود پیدا میکنند. بنابراین غذاهای ایتالیایی، چینی و هندی، به صورت جداگانه در نظر گرفته میشوند.
سطح دوم (HTTP) مدل بلوغ ریچادسون
فرضیات:
- تمایز بین منابع در سطح URI
- تمایز متد HTTP بسته به سناریو درخواست
- بازگرداندن خطا در بدنه پاسخ
در این قسمت، با توجه به ذات درخواست، از متدهای مناسب آن استفاده میشود. برای مثال برای تغییر سفارش، از متد PUT استفاده میکنیم.
سطح سوم (Hypermedia) مدل بلوغ ریچادسون
فرضیات:
- تمایز بین منابع در سطح URI
- تمایز متد HTTP بسته به سناریو درخواست
- بازگرداندن خطا در بدنه پاسخ
- استفاده از لینکها برای نشان دادن ارتباط بین منابع
در این سطح، رستوران با توجه به دانشی که درمورد منبع دارد، سرویسهای مرتبط را به صورت لینک برمیگرداند. برای مثال لینک مربوط به مخلفات اضافه پیتزا یا لینک مربوط به جزئیات سفارش را برمیگرداند.
جمعبندی
در این مقاله ابتدا خیلی خلاصه با معماری Rest آشنا شدیم و اهمیت پیادهسازی آن را عنوان کردیم. سپس به بررسی سطوح مدل ریچاردسون که برای سنجش میزان انطباق به Rest ارائه شده است، پرداختیم. نکتهای که باید همواره در نظر بگیریم این است که با توجه به سیستم خود بهترین تصمیم را برای آن گرفته و سعی در تطبیق سیستم با معماری نداشته باشیم، بلکه معماری مناسب با سیستم خود را انتخاب کنیم.
دیدگاهتان را بنویسید