۲۹ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

طراحی پشتی انعطاف پذیر با GraphQL به پایان می رسد

منعطف تر و کارآمدتر از REST، GraphQL یک معماری API ساده تر را امکان پذیر می کند. از GraphQL با Ballerina و Choreo برای ادغام یکپارچه استفاده کنید.

منعطف تر و کارآمدتر از REST، GraphQL یک معماری API ساده تر را امکان پذیر می کند. از GraphQL با Ballerina و Choreo برای ادغام یکپارچه استفاده کنید.

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

در نظر گرفتن یک رویکرد مدرن تر برای دسترسی به داده ها می تواند تفاوت را ایجاد کند. با اتخاذ GraphQL، سازمان‌ها می‌توانند سیستم‌های پشتیبان انعطاف‌پذیر، مقیاس‌پذیر و پاسخگوتری طراحی کنند تا حداکثر ارزش را از داده‌های خود استخراج کنند، و نوآوری و تمایز را در بازار تقویت کنند.

نمونه سناریو: سیستم مدیریت سفر

بیایید یک مثال از یک سرویس مدیریت سفر فرضی به نام TravelTracker را مثال بزنیم.

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

پایگاه داده تاریخچه سفر، فعالیت‌های سفر گذشته کاربران، از جمله جزئیات رزروهای قبلی مانند پروازها، هتل‌ها، اجاره خودرو و بسته‌های تور را ثبت می‌کند. با ادغام برنامه وفاداری، مانده مسافت پیموده شده کاربران، امتیازات کسب شده، سطح وضعیت نخبگان، و پاداش های موجود از ارائه دهندگان برنامه وفاداری مختلف به دست می آید.

wso2 graphql 01

در سیستمی مانند این، تعریف معماری API مناسب بسیار مهم است. معماری API اساس نحوه تعامل سیستم های نرم افزاری مختلف است. این فقط در مورد ایجاد یک ارتباط نیست؛ این در مورد تنظیم قوانین و هموار کردن راه برای ارتباطات قابل اعتماد و انعطاف پذیر در یک اکوسیستم نرم افزاری است.

متداول ترین سبک های معماری، مانند REST، GraphQL، WebSocket، Webhooks، RPC، SOAP و غیره، رویکردهای طراحی API منحصر به فردی را ارائه می دهند. انتخاب سبک API مناسب شامل در نظر گرفتن عواملی مانند الزامات پروژه، ملاحظات عملکرد، نیازهای مشتری و سازگاری با اکوسیستم است تا اطمینان حاصل شود که معماری انتخاب شده با اهداف و محدودیت های پروژه مطابقت دارد.

بیایید بررسی کنیم که چگونه طراحی محبوب مبتنی بر REST با مشکل مقابله می‌کند و بررسی کنیم که آیا GraphQL جایگزین بهتری ارائه می‌دهد یا خیر.

طراحی API با REST در مقابل GraphQL

بیایید طراحی API را در مثال TravelTracker بررسی کنیم. تصور کنید نمای اولیه داشبورد برنامه یک نمای خلاصه ارائه می دهد که شامل داده های مهم نمایه کاربر، آخرین سابقه سفر و داده های وفاداری برتر برای کاربری است که در حال حاضر وارد شده است.

با رویکرد REST API، داده‌های مورد نیاز باید با دسترسی به چندین نقطه پایانی جمع‌آوری شوند. بنابراین، این نقاط پایانی را می توان به صورت زیر تعریف کرد:

  • /users/ نقطه پایانی برای واکشی اطلاعات نمایه کاربر.
  • /users//history نقطه پایانی که سابقه سفر کاربر را برمی‌گرداند.
  • نقطه پایانی

  • /users//loyalty که فهرستی از جزئیات حساب وفاداری را برمی‌گرداند.

wso2 graphql 02

با رویکرد GraphQL، یک پرس و جو می تواند به سرور ارسال شود و داده های دقیق مورد نیاز را مشخص کند. سپس سرور با داده های درخواستی پاسخ می دهد.

wso2 graphql 03

GraphQL بهترین REST است

GraphQL، که توسط فیس‌بوک در سال ۲۰۱۲ معرفی شد و در سال ۲۰۱۵ به طور عمومی منتشر شد، یک پروتکل لایه برنامه‌ای است که برای تقویت RESTful طراحی شده است. تماس های API این هم به عنوان یک زبان پرس و جو برای API و هم به عنوان یک زمان اجرا در سمت سرور عمل می کند و پرس و جوها را بر اساس یک سیستم نوع تعریف شده برای داده ها اجرا می کند.

اگرچه REST به دلیل سادگی، پذیرش گسترده و سازگاری با زیرساخت های موجود به طور گسترده مورد علاقه است، GraphQL مزایای زیادی نسبت به REST دارد.

GraphQL انعطاف‌پذیری بیشتری را نسبت به داده‌ها ارائه می‌کند، و از مشکلات رایج واکشی بیش از حد و کم واکشی داده‌ها اجتناب می‌کند. از طریق قابلیت های پرس و جو، برنامه های کاربردی سرویس گیرنده می توانند داده های مورد نیاز را دقیقا مشخص کنند و نیازی به تماس های شبکه متعدد را از بین ببرند. این نه تنها عملکرد GraphQL API را افزایش می دهد، بلکه مشکلات مربوط به کارایی پهنای باند را نیز حل می کند. علاوه بر این، مشتریان می توانند به طور مکرر با درخواست مجموعه داده های خاص اضافی بدون هیچ تغییری در سطح API، رابط های کاربری شخصی سازی شده را توسعه دهند.

GraphQL دارای یک طرح قوی تایپ شده است که به طور دقیق داده های موجود و ساختار آن را تعریف می کند و احتمال ناهماهنگی در طول بازیابی داده ها را کاهش می دهد. طرحواره ها به عنوان تنها منبع حقیقت برای API عمل می کنند که برای مصرف کنندگان API مفید است. آنها پشتیبانی از ابزار قدرتمند، از جمله مستندات تولید خودکار، بررسی نوع، و یکپارچه سازی IDE را فعال می کنند. این امر تجربه توسعه‌دهنده را افزایش می‌دهد و با ارائه اطلاعات و کمک‌های ارزشمند، فرآیند توسعه را تسهیل می‌کند.

هر منبع در یک API RESTful با یک URL منحصر به فرد شناسایی می شود که باعث می شود API بصری و قابل درک باشد. API های GraphQL معمولاً یک نقطه پایانی را نشان می دهند که پرس و جوها، جهش ها و اشتراک ها را می پذیرد. این باعث پیچیدگی بیشتر می شود، اما ارتباط مشتری-سرور را ساده می کند و نیاز به چندین نقطه پایانی را کاهش می دهد که منجر به معماری ساده تر می شود. همچنین قابلیت نگهداری API را بهبود می بخشد.

REST در مقابل GraphQL: انتخاب درست

تعیین استفاده از REST یا GraphQL به عوامل مختلفی از جمله الزامات پروژه، تخصص تیم توسعه و موارد استفاده خاص بستگی دارد.

REST برای سناریوهای زیر مناسب تر است:

  • اگر برنامه نیاز به داده های مستقیم دارد، REST ممکن است انتخاب مناسبی باشد. API های RESTful برای عملیات CRUD (ایجاد، خواندن، به روز رسانی، حذف) در منابع با ساختارهای داده قابل پیش بینی مناسب هستند.
  • به دلیل ماهیت بدون حالت، API های REST با مکانیسم های ذخیره سازی به خوبی کار می کنند. اگر برنامه برای بهبود عملکرد و کاهش بار سرور به ذخیره سازی گسترده پاسخ ها نیاز دارد، REST ممکن است گزینه بهتری باشد. ذخیره سازی در GraphQL امکان پذیر است، اما به دلیل ماهیت انعطاف پذیر و دقیق بودن بازیابی داده ها، می تواند چالش هایی را ایجاد کند.
  • اگر پروژه نیاز به ادغام با سیستم‌ها یا سرویس‌های موجود دارد که قبلاً API‌های RESTful را در معرض دید قرار می‌دهند، پایبندی به REST می‌تواند تلاش‌های یکپارچه‌سازی را ساده کرده و از سازگاری با گردش‌های کاری تعیین‌شده اطمینان حاصل کند.

GraphQL برای این سناریوها مناسب تر می شود:

  • اگر برنامه نیاز به داده پیچیده دارد یا نیاز به واکشی داده از منابع متعدد در یک درخواست دارد، قابلیت‌های جستجوی انعطاف‌پذیر GraphQL آن را به یک انتخاب قانع‌کننده تبدیل می‌کند.
  • اگر اهداف اولیه شامل توانمندسازی مشتریان برای درخواست تنها داده‌های مورد نیاز و اطمینان از سازگاری API برای تکامل بدون ایجاد اختلال در کلاینت‌های موجود باشد، GraphQL به عنوان انتخاب ترجیحی ظاهر می‌شود. این به عنوان یک مزیت قابل توجه است، به ویژه در سناریوهایی که برنامه مشتری در شبکه های تلفن همراه کند کار می کند یا توسط کاربران در مناطق دورافتاده با اتصال پایدار کمتر استفاده می شود.
  • اگر نیاز به جا دادن کلاینت‌های مختلف از طریق یک API وجود داشته باشد، هر کدام نیازهای داده‌ای متفاوتی دارند، GraphQL به عنوان گزینه برتر برجسته می‌شود. این به طور ماهرانه نیازهای مشتریان مختلف را از طریق یک نقطه پایانی API منفرد مدیریت می کند و اطمینان می دهد که هیچ تغییر مخربی روی کلاینت های موجود تأثیر نمی گذارد. این انعطاف پذیری به ویژه در حفظ خدمات یکپارچه در چندین پلت فرم یا نسخه مفید است.

یک سرویس GraphQL با Ballerina و Choreo بسازید

چندین زبان برنامه نویسی و محصولات یکپارچه سازی وجود دارد که معمولاً برای توسعه راه حل های مبتنی بر GraphQL استفاده می شود. انتخاب زبان برنامه نویسی صحیح یا محصول یکپارچه سازی برای توسعه یک برنامه GraphQL که نیازها را برآورده می کند و عملکرد بهینه دارد، بسیار مهم است. هنگام انتخاب، عواملی مانند تخصص تیم توسعه، الزامات پروژه، ملاحظات عملکرد، پشتیبانی جامعه، و سازگاری با اکوسیستم را در نظر بگیرید.

بالرین یک منبع باز، بومی ابر زبان برنامه نویسی بهینه شده برای یکپارچه سازی. توسعه یک سرویس GraphQL با Ballerina شامل استفاده از ویژگی‌های داخلی آن برای توسعه و ادغام یکپارچه API است. پس از اتمام مرحله توسعه، برنامه های GraphQL را می توان با استفاده از فناوری استقرار مانند VM یا Kubernetes مستقر کرد. همچنین می توان از Choreo به عنوان پلتفرم توسعه دهنده داخلی برای استقرار و مدیریت برنامه های GraphQL بومی ابری در حالی که زمان ورود به بازار را کاهش می دهند.

طراحی طرحواره با سیستم نوع Ballerina

Ballerina از هر دو رویکرد کد اول و طرح اول هنگام توسعه خدمات GraphQL پشتیبانی می کند. با پشتیبانی از سیستم نوع غنی Balerina، تعریف انواع و فیلدهایی که مدل داده برنامه را منعکس می‌کنند بسیار بصری است. طراح سرویس GraphQL ساده‌سازی می‌کند درک و پیمایش سرویس‌های پیچیده GraphQL و به توسعه‌دهنده اجازه می‌دهد تا بدون بررسی مستقیم کد آنها را مرور کند.

اجرای Resolver با خدمات Ballerina

پشتیبانی داخلی خدمات Ballerina به توسعه دهندگان این امکان را می دهد تا با استفاده از نحو زبان برنامه نویسی آشنا، حل کننده هایی بنویسند تا پرس و جوها، جهش ها و اشتراک های GraphQL را مدیریت کنند. این به توسعه دهندگان اجازه می دهد تا روی منطق تجاری تمرکز کنند و هرگونه بار مربوط به پروتکل را حذف می کند.

آزمایش با چارچوب آزمون Ballerina و ابزارهای مشتری

چارچوب تست Ballerina قابلیت‌های آزمایشی جامع، از جمله تمسخر، ادعا، و تجزیه و تحلیل پوشش را برای اعتبارسنجی رفتار سرویس‌های GraphQL، مانند حل‌کننده‌ها و مدیریت خطا، ارائه می‌کند. ماژول Ballerina GraphQL شامل کاراینت داخلی GraphiQL برای آزمایش APIهای GraphQL است. با استفاده از GraphiQL IDE.

تولید اسناد و طرحواره

چارچوب سند Ballerina به شما امکان می‌دهد تا انواع، فیلدها، جستجوها، جهش‌ها و اشتراک‌ها را با استفاده از نظرات سند Ballerina در طرح مستند کنید. این اسناد API تعاملی را با استفاده از ابزارهای تولید اسناد داخلی Ballerina ایجاد می کند و درک و تعامل با سرویس GraphQL را برای مشتریان آسان می کند. همچنین، ابزار GraphQL Ballerina قابلیت‌هایی را برای تولید طرح GraphQL برای یک سرویس Ballerina GraphQL ارائه می‌کند. p>

ویژگی های پیشرفته GraphQL

به‌علاوه، Ballerina دارای ویژگی‌های پیشرفته GraphQL است، مانند پشتیبانی داخلی برای کش کردن GraphQL، فدراسیون و بارکننده داده، به طور یکپارچه در اکوسیستم خود ادغام شده است و به توسعه دهندگان این امکان را می دهد تا API های GraphQL قوی و کارآمد را بدون زحمت طراحی کنند. اقدامات امنیتی برای محافظت از سرویس GraphQL را می توان با استفاده از ساخته شده Ballerina اجرا کرد. در ویژگی های امنیتی، مانند OAuth و JSON Web Tokens.

استقرار با Choreo

در نهایت، سرویس GraphQL را می توان با استفاده از Choreo در یک محیط تولید مستقر کرد. Choreo یک پلتفرم توسعه‌دهنده داخلی به‌عنوان سرویسی است که فرآیند طراحی، توسعه، استقرار و مدیریت برنامه‌های بومی ابری را ساده می‌کند.

Choreo استقرار آسان برنامه‌ها را بر روی پلتفرم‌های ابری محبوب مانند AWS، Azure، Google Cloud و موارد دیگر امکان‌پذیر می‌سازد. Choreo CI/CD، استقرار، مقیاس‌بندی و نظارت را کنترل می‌کند و از دسترسی و قابلیت اطمینان بالا در محیط‌های تولید اطمینان می‌دهد. علاوه بر این، Choreo یک کنسول GraphQL یکپارچه برای آزمایش نقاط پایانی GraphQL در معرض عموم دارد.

انعطاف پذیر، مقیاس پذیر، پاسخگو

از آنجایی که کسب و کارها در چشم انداز دیجیتال حرکت می کنند، تقاضا برای یکپارچه سازی سیستم یکپارچه در حال افزایش است. GraphQL سازمان‌ها را قادر می‌سازد تا سیستم‌های بک‌اند انعطاف‌پذیرتر، مقیاس‌پذیرتر و پاسخگوتر را طراحی کنند. با استفاده از TravelTracker به عنوان مثال، ما دیدیم که چگونه قابلیت‌های جستجوی GraphQL، بازیابی داده‌ها را ساده می‌کند، و به مسائلی مانند واکشی بیش از حد و کم واکشی می‌پردازد. استفاده از قابلیت های Ballerina و Choreo توسعه GraphQL را بیشتر افزایش می دهد و یکپارچه سازی یکپارچه و استقرار ساده را ارائه می دهد.

Anupama Pathirage مدیر مهندسی برای ادغام در WSO2 است. قبل از پیوستن به WSO2، Anupama در DirectFN (Pvt.) Limited به عنوان سرپرست فنی کار می کرد، جایی که او مسئول تحقیق، طراحی و توسعه برنامه های کاربردی با تاخیر کم در سطح سازمانی در خدمات مالی و صنایع بازار سرمایه بود. او دارای مدرک کارشناسی ارشد در علوم کامپیوتر (تخصص معماری نرم افزار) و مدرک کارشناسی ارشد در رشته علوم و مهندسی کامپیوتر از گروه علوم و مهندسی کامپیوتر، دانشگاه موراتووا، سریلانکا است.

انجمن فناوری جدید مکانی را برای رهبران فناوری – از جمله فروشندگان و سایر مشارکت‌کنندگان خارجی – فراهم می‌کند تا فناوری سازمانی نوظهور را در عمق و وسعت بی‌سابقه بررسی و بحث کنند. انتخاب ذهنی است، بر اساس انتخاب ما از فناوری هایی که معتقدیم مهم هستند و برای خوانندگان InfoWorld بیشترین علاقه را دارند. InfoWorld وثیقه بازاریابی را برای انتشار نمی پذیرد و حق ویرایش تمام محتوای ارائه شده را برای خود محفوظ می دارد. همه پرس و جوها را به doug_dineley@foundryco.com.